2017-05-02 11 views
0

Web上でダウンロード可能なレポートがあります。同じ列に、数字の複数の書式設定スタイルがあります。すなわち:複数の数値書式を持つExcelで列を抽出する

1.000 EA(#、## 0.000" EA ")

1.000 AU(#、## 0.000" AU ")

1.000 PAK(#、## 0.000" PAK」)

この列からEA、PAK、AUを抽出する必要がありますが、格納されている値は実際にはすべて「1」であるためコピーできません。私は値として異なるフォーマットされた番号を持つ列を抽出または作成することができます任意の方法はありますか?C

+0

@Ralphを変更する必要があり、私は彼が列内のテキストとして書式を取得したいと思います。フォーマットをコピーしない。それはおそらく重複していません。 – nightcrawler23

+0

はい、それは似ているようです。私はvbaコードを使用していません。私はこれを行う必要があることを説明することができます。または、これはどのような方法でもセル値ですか? –

+0

ああ、その場合、おそらく '= CELL(" format "、A1)'を探しているでしょうか?それが助けにならない場合は、VBAコードを書く必要があります(これはExcel式のみでは実現できないためです)。 VBAコードにはループと '.NumberFormat'が含まれます。 – Ralph

答えて

0

VBエディタ内のモジュールに入れ、このコードを(AltキーF11

Function myFormat(r As Range) As String 
    myFormat = r.NumberFormat 
End Function 

セル内に式=myFormat(A1)を使用すると、セルのフォーマットが文字列としてA1になります。以下

は、すべてのVBAソリューションです:

は今、所望の細胞に

=TRIM(SUBSTITUTE(RIGHT(myFormat(A1), LEN(myFormat(A1)) - FIND("""",myFormat(A1),1)),"""","")) 

これは望ましい結果

を更新あなたを与える必要があり、この式を置きます。あなたの要件ごとmyRangeoutputRange

Sub runThis() 
    Dim myRange As Range 
    Set myRange = ThisWorkbook.Sheets("Sheet1").Range("A1:A3") 'Change this as per your requirement 

    Dim outputRange As Range 
    Set outputRange = ThisWorkbook.Sheets("Sheet1").Range("F1") 'Change this as per your requirement 

    Dim s As String 

    For i = 1 To myRange.Rows.Count 
     s = myRange(i, 1).NumberFormat 
     s = Right(s, Len(s) - WorksheetFunction.Find("""", s, 1)) 
     s = Trim(WorksheetFunction.Substitute(s, """", "")) 
     outputRange.Offset(i - 1, 0) = s 
    Next i 
End Sub 
+0

あなたの数式を '= myFormat(" A1:B5 ")'とすればどうなるかチェックしましたか? – Ralph

+0

@Ralphこれは何が必要ですか?私はVBAソリューションを追加しました:D – nightcrawler23

+0

VBAソリューションは、 'InStr()'と 'WorksheetFunction.Substitute'の代わりに' WorksheetFunction.Find'を使用しているので、数値フォーマットに '' 'が含まれていないとランタイムエラーを生成します。 'Replace()'の代わりに。 – Ralph

関連する問題