• ベストアンサー

cm.mm.mなどが入力された計算式

A    b 1 12cm 2 2 13.4m 3 3 200m 4 などの桁数も単位もばらばらなセルを計算するためにはどうしたら簡単に計算できますでしょうか? ↓のような式をたてましたが、なかなか大変で... =IF(RIGHT(A1,2)="cm",VALUE(LEFT(A1,FIND("cm",A1)-1))*B1,IF(RIGHT(A1,2)="m",VALUE(LEFT(A1,FIND("m",A1)-1))*B1,VALUE(LEFT(A1,FIND("mm",A1)-1))*B1)) よろしくお願いします。

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

  • ベストアンサー
回答No.4

ほぼ同時に回答が出てしまいましたが、 #3さんと同じ内容ですね。 私の方は、VALUEを使用しない方法です。 IF文も消してみました。 =LEFT(A1,LEN(A1)-2+ISNUMBER(LEFT(RIGHT(A1,2),1)*1))*B1 あと、単位を付けるなら =LEFT(A1,LEN(A1)-2+ISNUMBER(LEFT(RIGHT(A1,2),1)*1))*B1&RIGHT(A1,2-ISNUMBER(LEFT(RIGHT(A1,2),1)*1)) です。(全て同じ単位に統一するならちょっと面倒です。)

lionmayumi
質問者

お礼

ありがとうございます。そーですよね。後ろに単位も必要ですね。 なかなか人の作った表を使うのは大変です(-_-;)

その他の回答 (6)

回答No.7

何度も何度もすみません。 もう1つ、入力のしやすさというのもあると思います。 一覧表を作る分にはそれ程問題もないと思いますが、 請求書や、明細書などを作成する時には、どうしても 項目がばらばらになってしまいます。 そんな時は、入力シートと印刷シートを分けて作るというのも 1つの方法だと思います。 他にも注意すべき事は、いろいろあるとは思いますが、 何事も経験でしょう。今回の質問がいい例です。 私もここの回答を何度もしていますが、昔した回答を見て、 今なら、もっといい回答が出来たのに!と思う事も少なくありません。 (今回の回答も、後から見たらもっといい回答が・・・と思うかもしれません。) 話がそれましたが、頑張ってください。

lionmayumi
質問者

お礼

ありがとうございます。入力シートと別に(^_-)-☆ いろんな考え方があるのですね~ がんばります。

回答No.6

>どのようにしたら、簡単に計算も出でき、 きれいな表になりますでしょうか??? 計算をする前提なら、単位は分けて入力した方がいいと思います。 見やすい表という事だと、やっぱり同列にある単位は、 統一した方が、(cmならcmに)見やすいでしょう。 (統一できない事もあるでしょうが) 統一できれば、セルの書式設定で、 #,###"m"などの書き方をして、数字のみ入力すればいい という方法も取れます。

回答No.5

#2,4です。 私のは、ちょっと裏技的(全然裏技じゃないですけど)で、 ="123"*1 = 123 文字列の数値を計算しようとすると、数値に変換してくれます。 =TRUE*1 = 1 =FALSE*1 = 0 TRUEやFALSEを計算しようとすると、TRUE=1,FALSE=0に変換してくれます。 覚えておくと便利ですよ!

lionmayumi
質問者

お礼

はいはい(^_-)-☆YESが1で、NOが0ですね。 なんとなく理解できそうです。 ありがとうございます。

lionmayumi
質問者

補足

で、これから自分が表を作成するときには (全く新しい表を作るとしたら) どのようにしたら、簡単に計算も出でき、 きれいな表になりますでしょうか??? 数字と単位は別セルに入力するといいのでしょうかね。

  • ARC
  • ベストアンサー率46% (643/1383)
回答No.3

あーはいはい。ISNUMBER関数が有効に機能してなかったみたいですね(^^; =VALUE(LEFT(A1,LEN(A1)-IF(ISNUMBER(VALUE(LEFT(RIGHT(A1,2),1))),1,2))) * B1 で、どうでしょ?

lionmayumi
質問者

お礼

ありがとうがざいます。できました。m(__)m

回答No.2

#1さんとほとんど同じになってしまいましたが、 =LEFT(A1,LEN(A1)-IF(ISNUMBER(LEFT(RIGHT(A1,2),1)*1),1,2))*B1 ではどうでしょうか? ISNUMBERが文字列の数値を、数値と認識しないみたいです。 (EXCEL2000)

lionmayumi
質問者

お礼

(^^♪ありがとうございます。できました。 で、ISNUMBER関数の使い方がいまいちわからないのですが、FALSEとTRUEを返すものにどうして1とかけると1とか2とか???返ってくるのでしょうか? すいません。 LEFT(RIGHT(A1,2),1ってことはcが抽出されて これに1をかけると???

  • ARC
  • ベストアンサー率46% (643/1383)
回答No.1

=VALUE(LEFT(A1,LEN(A1)-IF(ISNUMBER(LEFT(RIGHT(A1,2),1)),1,2))) * B1 と書けば、同様の結果になるかと思います。 (右から2桁目が数値か否かで、切り出す桁数を変えています。) 同じような計算が頻発するようでしたら、例えば、C列を一時的な計算用として、 =VALUE(LEFT(A1,LEN(A1)-IF(ISNUMBER(LEFT(RIGHT(A1,2),1)),1,2))) とか、 =VALUE(LEFT(A1,LEN($A1)-IF(ISNUMBER(LEFT(RIGHT(A1,2),1)),1,2))) * IF(RIGHT(A1,2)="cm",10,IF(RIGHT(A1,2)="mm",1,1000)) とかの式を入れておいて、残りの計算はC列の値を使用するようにすれば、より分かりやすく作れるのではないかと思います。

lionmayumi
質問者

お礼

ありがとうございます。 一番上の方法をやってみました。 なんとかできました。でも、小数点以下がなくなりますね。

関連するQ&A

  • マクロで計算式に入力

    マクロで計算式を入力するのに 例えばセルA1に『=SUM(B1:C1)』という式を入れる時に Range("A1").Formula = "=SUM(B1:C1)" というコードを書いて処理しています。 しかし『=IF(B1=1,"一です","")』というように文中に『"』があるような式を入力しようとするとエラーが出でしまいます。 &でくくったり色々してみたのですがうまくいきません。 何か方法があるのでしょうか。

  • Excel簡単入力

       A     B     C     D 1  日付   部門   支店    氏名   金額 2  21/12/1  製造   東京    山田   1000 3  21/12/3  営業   大阪    宮崎    500 上セルと同一内容を簡単に入力する際、Ctrl キー+Shift+"で上セルの内容をコピーし編集状態になりEnterで確定しますよね?それをもっと簡単に空白セルの時Enterで上セルをコピーし編集状態でもう一度Enterで確定というマクロを組みたいので教えてください。初心者です。 なお、皆さんに教えてもらってA1:A600まで以下のマクロを設定し正常に動作しています。 Private Sub Worksheet_Change(ByVal Target As Range) On Error Resume Next Dim r As Range Dim flg As Long flg = 0 If Intersect(Target, Range("A4:A600")) Is Nothing Then Exit Sub 'A列のみを対象 最初につなげるところ ActiveSheet.Unprotect flg = 1 For Each r In Target Dim a As Long Dim b As String With r If Not .NumberFormatLocal = "ge.m.d" Or .Value = "" Then .NumberFormatLocal = "G/標準" 'セルの書式設定がH00.m.d形式だったら標準に戻す 'セルが 数字    且      整数    且  101以上  且    991231以下 の場合 If IsNumeric(.Value) And Int(.Value) = .Value And .Value >= 101 And .Value <= 1111231 Then b = Str(Val(Left(.Value, 2)) + 1988) & "/" & Mid(.Value, 3, 2) & "/" & Right(.Value, 2) If IsDate(b) Then 'もしbがDateの形なら .Value = CDate(b) 'データ型を日付にする 'ここにつなげる。 変数はtmpからbに直す .NumberFormatLocal = "ggg" & _ IIf(Format(b, "e") > 9, "e年", "_0e年") & _ IIf(Month(b) > 9, "m月", "_1m月") & _ IIf(Day(b) > 9, "d日", "_1d日") ActiveSheet.Protect End If End If End With Next End Sub どうかよろしくお願いします。

  • エクセルでの計算式

    エクセルを使用して 計算式を入れたいのですが 例えば セルA(2500)×セルB(8)=20000と出るのは 解るのですが これを 20に直す方法 ありますか? 簡単に言いますと2500mm×8枚といった感じで20mという 数式にしたいのですが。 よろしくお願いいたします

  • 日付入力マクロ

    On Error Resume Next Dim r As Range Dim flg As Long flg = 0 If Intersect(Target, Range("A4:A600,E4:E600,J4:J600")) Is Nothing Then Exit Sub 'A列のみを対象 最初につなげるところ ActiveSheet.Unprotect flg = 1 For Each r In Target Dim a As Long Dim b As String With r If Not .NumberFormatLocal = "ge.m.d" Or .Value = "" Then .NumberFormatLocal = "G/標準" 'セルの書式設定がH00.m.d形式だったら標準に戻す 'セルが 数字    且      整数    且  101以上  且    991231以下 の場合 If IsNumeric(.Value) And Int(.Value) = .Value And .Value >= 19010101 And .Value <= 20991231 Then b = Left(.Value, 4) & "/" & Mid(.Value, 5, 2) & "/" & Right(.Value, 2) If IsDate(b) Then 'もしbがDateの形なら .Value = CDate(b) 'データ型を日付にする 'ここにつなげる。 変数はtmpからbに直す .NumberFormatLocal = "ggg" & _ IIf(Format(b, "e") > 9, "e年", "_0e年") & _ IIf(Month(b) > 9, "m月", "_1m月") & _ IIf(Day(b) > 9, "d日", "_1d日") ActiveSheet.Protect End If End If End With Next End Sub 上記のマクロで20090731と入力すると平成21年7月31日と表示されます。 210731を入力して平成21年7月31日と表示されるようにすることは可能ですか?

  • Excel関数で 空白値の入力はどう書くの?

    あるセル(B1とします)に =if(A1="a",0,"") とif関数を書きました。 別のセルA2にセルB1を合計するような式( =B1+C1 )と書くと#VALUE! というエラーになります。 多分、B1の値 "" が空白ではなく文字列と認識されているからだと思いますが、""の代わりに空白値をif分の中に指定することはできないのでしょうか? 逃げ手として、A2に書く式を =sum(B1:B1)+sum(C1:C1)とする手はありかと思いますが、できたら空白値を代入したいです。

  • エクセルの計算式を教えてください。

    エクセルの計算式を教えてください。 例えば、セルB2に、IF(B1="","",20)という数式があったとしまして、B2が "" だった場合、別セルに =B2+50 という計算式を入れると、B2を空白とみなさず、VALUE!になってしまいますが、この空白のB2を、0もしくは、無視して計算する方法はありますでしょうか?

  • エクセル「2個×100」で計算式を作成する場合

    A1のセルに2と入力し、B1のセルに4と入力してある場合、C1の計算式は=A1*B1と入力すれば8という答えが出せます。 しかし、例えばこの場合に、A1のセルが「2個」のように、「個という」単位がついている場合は、結果が#VALUE!となってしまいます。 そこで質問なのですが、これを回避する簡単な方法、つまり単位が付いていても計算を導き出せる、簡単な方法はありますでしょうか。 やはり、A1とB1の間に「個」という文字を挿し入た新たな列を入れなくてはならないのでしょうか。 ここが疑問であります。 また、さらに上記のセルの形式で、A2~A100まで、連続100行ほど同様のデータの表がすでに作成してあった場合、計算をし直すことは簡単なのでしょうか。 よろしくお願い致します。

  • エクセルマクロでの計算について(2007)

    エクセルマクロ初心者です。 試行錯誤しながら作成しています。 セルB1には直接計算式を入れており(=(480+(A1)*10)/480*I1) その結果次第(70以下)でセルC1に計算結果(=(75-B1)*.48)をいれて 70より大きければセルC1に"-"を入れたいのですが上手く計算してくれません。 この処理を約65個のセルにしようと思っています。(セルの列はバラバラです) どうすればよいかご教示ください。 ちなみに現在作成している文は Private Sub 計算_Click() Worksheets("sheet2").Select If Range("B1").Value <= 70 Then Range("C1").Formula = "=(75 - (B1)) * 0.48" Else: Range("C1").Value = "-" End If End Sub よろしくお願いいたします。

  • h:mm ⇒ m:ss 変換

    http://okwave.jp/qa/q9701321.html の投稿にもあるように、 》 例えば4分13秒というデータを入れようとすると 》 「0:4:13」と記入すると入れないといけません 試行錯誤していて分かった(つもり)のは、0:4:13 と入力したセルを A1 とすると、 m:ss に書式設定したセル B1 に式 =A1/60 を入力すると、4分13秒 を意味する 4:13 と表示されます。私にはその理屈が理解できません。 h:mm 形式の数値を 60 で除算するとなぜ m:ss 形式の数値に変換できるのか教えてください。

  • エクセル・IF関数・レフト/ライト関数について

    よろしくお願いいたします。 例えば ある文字の 右から5行目(最後の一文字はいらない)までの文字を 読み込みたいという時の事ですが・・・・ たとえば セルA1 の 日野自動車 (7205) という文字の 7205 だけを読み込みたいのです。 =RIGHT(A1,5) という関数を使うと 表示されるは 7205)と なります。最後の ) がいらないのです。(SAM計算ができなくなるため)   表示    日野自動車 (7205) 式        ↓=RIGHT(I1,5) 表示       7205) 式        ↓=LEFT(I2,4) 表示       7205 このやり方なら できましたが・・・・ IF関数をしこむ セルが2つになってしまうなどで 困ってしまったのです。セル 一つにIF関数をしこめば大丈夫な式はありますでしょうか? すみませんが よろしくお願いいたします。  

専門家に質問してみよう