• ベストアンサー

VBAで文字を削除後、指数に変換

宜しくお願いします。 E列(セルの表示形式=標準で約1000行)に下記のような数値が入っているのですが(p=ピコ1E-12、n=ナノ1E-9、u=マイクロ1E-6)そのE列のp、n、u等を削除してF列にセルの表示形式=指数で小数点以下2桁にコピーしたいのですがVBAで可能でしょうか。 --------------現在---------------- E列 38.000p 8.2360n 2.4778u 空白セル 0.001 --------------VBA後---------------- E列         F列 38.000p      3.80E-11 8.2360n      8.24E-09 2.4778u      2.48E-06 空白セル      空白セル 0.001       1.00E-03

質問者が選んだベストアンサー

  • ベストアンサー
  • mshr1962
  • ベストアンサー率39% (7417/18945)
回答No.1

数式でもよければ =IF(E2<>"",VALUE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(E2,"p","E-12"),"n","E-9"),"u","E-6")),"") これで表示形式を指数にしてください。

hibohibo
質問者

お礼

mshr1962さん回答ありがとう御座いました。 関数でも出来るのですね、これでグラフを完成する事が出来ました。 今回はお世話になりました。

その他の回答 (1)

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.2

拙いVBAでやってみました Sub test01() d = Range("A65536").End(xlUp).Row Worksheets("Sheet2").Activate For i = 1 To d s = Worksheets("Sheet2").Cells(i, "A") If s = "空白セル" Then Else r = Right(s, 1) Select Case r Case "p" Cells(i, "C") = Left(s, Len(s) - 1) * (10 ^ -12) Case "n" Cells(i, "C") = Left(s, Len(s) - 1) * (10 ^ -9) Case "u" Cells(i, "C") = Left(s, Len(s) - 1) * (10 ^ -6) Case Else Cells(i, "C") = s * 1 End Select Cells(i, "C").NumberFormatLocal = "0.00E+00" End If Next i End Sub If s = "空白セル" ThenはIf s = "" Thenが適当かも。 下記  A列 質問データ B列 質問の希望正解 C列 本件VBA結果 A列   B列   C列  38.000p 3.80E-11 3.80E-11 8.2360n 8.24E-09 8.24E-09 2.4778u 2.48E-06 2.48E-06 空白セル 空白セル 0.001 1.00E-03

hibohibo
質問者

お礼

imogasiさん回答ありがとう御座いました。 マクロでも問題なく出来ました。 良い勉強になりました、ありがとう御座います。