- 締切済み
質問 エクセル マクロで表内の単位を変換する方法は?
質問 エクセル マクロで表内の単位を変換する方法は? シート”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 どなたかご教授願いませんでしょうか?
- みんなの回答 (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)
>単位を mA に合わせた場合 とある事から、ある単位を選択してそれに統一したい、 と言うように思えますが。。。 その場合、全ての単位間の関係(1A⇒1000mA・・・)をコードに 書き込むなり、どこかのセルに打ち込んでおくなりしておく事が、 必要かと。 例) A mA 1000 mA A 0.001 等々の単位と係数の一覧表を作成しておく。
- imogasi
- ベストアンサー率27% (4737/17069)
1セルのデータにおいて、単位の文字の分解からして、適当な関数等は無い。 思いつくところでは (1)数字かどうか各桁判断を全桁繰り返し (2)出てくる単位(文字列)をすべて質問者が配列にでも用意し セルの値に含まれないかチェックする(INSTR関数等利用) ーー そこから単位変換作業だが、変換ルーチンをここに作る必要があろう (2)の配列に対応した配列に、掛ける数を定義するのも1つの手。 ーー いずれにしても力仕事のコーディングとなろう。 === エクセルの普通の関数にはCONVERT関数があるが A。本件には向いてないかな(電力単位が無い?) B。Worksheetfunction.Convertが使えるか ーー Sub test01() MsgBox Application.WorksheetFunction.Convert(1, "m", "cm") End Sub はエラーになる ーー 使えないという気がする。