• 締切済み

質問 エクセル マクロで表内の単位を変換する方法は?

質問 エクセル マクロで表内の単位を変換する方法は? シート”SHEET1” (変更前)      1.0V    2.0V A_pin  1.00uA   3.0mA B_pin  2.00mA   0.44A C_pin  0.0A    5.0nA 上記、表は、セル内に単位付で値が入っています。 その単位を統一した形の表に変えたいと思っています。 単位を  mA に合わせた場合 シート”SHEET2” (変更後)      1.0V    2.0V A_pin  0.001    3.000 B_pin  2.000    440.0 C_pin  0.0     0.000005 どなたかご教授願いませんでしょうか?

みんなの回答

noname#70958
noname#70958
回答No.3

単純に単位を揃えて桁を上げ下げするだけであれば、 マクロはもちろん、数式一発でもやれますが、 むしろ【有効桁の取扱い】が問題になるような気が…。 ●数式で A1セルの値をmAにする場合  =LEFT(A1,LEN(A1)-2+ISNUMBER(-LEFT(RIGHT(A1,2),1)))*10^(SUM(ISNUMBER(FIND({"mA","uA","nA"},A1))*{1,2,3})*-3+3) ※変換後の単位をA,uA,nAにする場合は、末尾の+3をそれぞれ+0,+6,+9に。  (+3の前の*-3はそのまま)   ●マクロで もっとスマートな方法もあると思いますが、 とりあえず思いついたまま素朴かつじみ~にやってみました。 ※回答用に端折れるだけ端折ってますから、  コーディングは参考にしない方が吉です。 動作の概要  アクティブシートをコピーし、選択範囲の値を指定した単位に変換する。  ※【変換する範囲を選択した状態で】起動してください。 '---------------------↓ ココカラ ↓--------------------- Sub Sample()  afUnt = InputBox("変換後の単位は? (A/mA/uA/nA)")  afExp = myFnc(afUnt)  ActiveSheet.Copy after:=ActiveSheet  For Each myCel In Selection   myStr = myCel.Value   bfUnt = Right(myStr, 2)   If IsNumeric(Left(bfUnt, 1)) Then bfUnt = "A"   bfExp = myFnc(bfUnt)   myCel.Value = Val(myStr) * 10 ^ ((afExp - bfExp) * 3)  Next myCel End Sub Function myFnc(Unt)  myFnc = WorksheetFunction.Match(Unt, Array("A", "mA", "uA", "nA"), 0) End Function '---------------------↑ ココマデ ↑--------------------- いずれもExcel2003で動作確認済 (マイクロのμは英字のuとして記述しています) 以上ご参考まで。

  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.2

>単位を  mA に合わせた場合 とある事から、ある単位を選択してそれに統一したい、 と言うように思えますが。。。 その場合、全ての単位間の関係(1A⇒1000mA・・・)をコードに 書き込むなり、どこかのセルに打ち込んでおくなりしておく事が、 必要かと。 例) A mA 1000 mA A 0.001 等々の単位と係数の一覧表を作成しておく。

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

1セルのデータにおいて、単位の文字の分解からして、適当な関数等は無い。 思いつくところでは (1)数字かどうか各桁判断を全桁繰り返し (2)出てくる単位(文字列)をすべて質問者が配列にでも用意し セルの値に含まれないかチェックする(INSTR関数等利用) ーー そこから単位変換作業だが、変換ルーチンをここに作る必要があろう (2)の配列に対応した配列に、掛ける数を定義するのも1つの手。 ーー いずれにしても力仕事のコーディングとなろう。 === エクセルの普通の関数にはCONVERT関数があるが A。本件には向いてないかな(電力単位が無い?) B。Worksheetfunction.Convertが使えるか ーー Sub test01() MsgBox Application.WorksheetFunction.Convert(1, "m", "cm") End Sub はエラーになる ーー 使えないという気がする。

関連するQ&A