• ベストアンサー

VBA 計算結果を数値ではなく、数式で表示したい。

配合表から配合比率を計算するVBAを組みたいのですが、実際の数値ではなく計算式を表示したいです。 こちらが自分で記入したコードです。 Q列とAA列とAB列をかけて、100で2回割った結果をAC列に表示します。同じ行にすべての数値が記入されないので、AB列からそれぞれ必要な列の数値を取得しています。 Sub 配合比率仮() Dim i As Integer Dim AB Dim Q Dim AA Range("AB3").Select For i = 1 To 500 If ActiveCell.Value = "" Then     '空白の場合下のセルへ ActiveCell.Offset(1, 0).Select Else '配合割合の数値がある場合 AB = ActiveCell.Value         'アクティブセルの数値の取得 Q = ActiveCell.Offset(0, -11).End(xlUp).Value        '重量比率を取得 AA = ActiveCell.Offset(0, -1).End(xlUp).Value        '配合割合の左列を取得 ActiveCell.Offset(0, 1) = s * t / 100 * u / 100       '製品の配合比率を計算(ここを数式にしたいです) ActiveCell.Offset(1, 0).Select       '下のセルへ End If Next i End Sub 上記コードでは数値が表示されます。数式で結果を表示させる方法を教えてください。Formula/FormulaR1C1プロパティを使うと思ったのですが、うまく動くコードが書けませんでした。初心者に毛が生えたようなもので上記コードもなっていないものかとは思うのですが、どうぞお力を貸してください。

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

  • ベストアンサー
  • xls88
  • ベストアンサー率56% (669/1189)
回答No.2

数式をセットしたいのですか? >ActiveCell.Offset(0, 1) = s * t / 100 * u / 100 s、t、u、の出処がよくわかりませんがセル番地になるのですか? 多分ですが 各セルの番地を取得して AB = ActiveCell.Address Q = ActiveCell.Offset(0, -11).End(xlUp).Address AA = ActiveCell.Offset(0, -1).End(xlUp).Address Formulaで数式をセットすればいけると思います。 ActiveCell.Offset(0, 1).Formula = "=" & AB & "*" & Q & "/100*" & AA & "/100"

rurumiko
質問者

お礼

できました。 ありがとうございます。 コードに間違いがあったにも関わらず、的確なご回答感謝します。

その他の回答 (2)

  • nattocurry
  • ベストアンサー率31% (587/1853)
回答No.3

確認させてください。 このコードだと、計算結果をセルに入力して、表示されるのも当然計算結果なのですが、それをどのようにしたいのでしょうか? ・計算式を表示させる(計算結果は表示されなくても良い) ・計算式を入力して、表示させるのは計算結果 添付画像は、どちらなのでしょうか? ・今はこうだけど、別なものにしたい ・このようにしたい また、 > ActiveCell.Offset(0, 1) = s * t / 100 * u / 100 この計算式の、sとtとuは、どこから出てきたのでしょうか? このコードは、ちゃんと動いているのでしょうか?

rurumiko
質問者

お礼

ご回答ありがとうございます。 今後は正確でわりやすい質問を心がけたいと思います。

rurumiko
質問者

補足

すいません。 ActiveCell.Offset(0, 1) = s * t / 100 * u / 100 は ActiveCell.Offset(0, 1) = AA * Q / 100 * AB / 100 でした。 申し訳ございません。 今はこのコードで数値が表示されいるのですが 、計算式を入力して、表示させるのは計算結果が希望です。

  • FEX2053
  • ベストアンサー率37% (7987/21355)
回答No.1

>ActiveCell.Offset(0, 1) = s * t / 100 * u / 100       '製品の配合比率を計算(ここを数式にしたいです) 「12×2.4/100×5.6/100」みたいに表示したい、って話ですよね。 でしたら ActiveCell.Offset(0, 1) = CStr(s) & "*" & CStr(t) & "/100 *" & CStr(u) & "/100" って感じで値を全て文字列変換し、文字列として設定してしまえばいいんじゃないかと。

rurumiko
質問者

お礼

わかりにくい質問でしたのに、ご回答ありがとうございます。

関連するQ&A

  • エクセルでデータの比較をしたいです。お教え頂けないでしょうか

    エクセルでデータの比較をしたいです。お教え頂けないでしょうか エクセルで2つのシートにある同一の商品コードと 在庫数を比較するマクロを作成中です。 シート1のA列にある商品コードとB列にある在庫数を取得し シート2のA列にある商品コードから同じ商品コードを探します。 同一の商品コードがあった場合に在庫数を比較して その数が減少していなければC列に次の処理を加える。  商品コードが合致した後は 処理を抜けて次の商品コードを比較させたいのですが 下行にある商品コードを探し続けてしまいます。(データの総当りとなる) つきましては どの様に記述すれば良いのでしょうか お教え頂けます様 よろしくお願い致します。 *********** Sub check1() Dim kz1 As long 'シート1データ数 Dim kz2 As long 'シート2データ数 Dim st1 As String 'シート名 Dim dt1 As Variant '商品コード Dim dt2 As Variant '在庫数 Sheets("sheet1").Select st1 = ActiveSheet.Name kz1 = Range("a65536").End(xlUp).Row Range("a1").Select ActiveCell.Offset(1, 0).Select For a = 0 To kz1 - 2 Sheets(st1).Select dt1 = ActiveCell.Value '商品コード dt2 = ActiveCell.Offset(0, 1).Value '在庫数 Sheets("sheet2").Select kz2 = Range("a65536").End(xlUp).Row Range("a1").Select ActiveCell.Offset(1, 0).Select For b = 0 To kz2 - 1 '同一商品コードを検索 if activecell.value = dt1 '在庫数を比較 if activecell.value >= dt2 '在庫数が同じ もしくは増加していた場合に処理 '次の処理を追加 endif else ActiveCell.Offset(1, 0).Select endif Next b Sheets(st1).Select Next a end sub

  • エクセルVBAでの関数

    下記、コードでセルに関数を入れるようにしてるのですが 関数で得られた値をセルに反映されるようにしたいのですが Dimを使用してもどう指定してよいのかわからず苦戦しております。 宜しくお願い致します。 Range("F1").Select Do Until ActiveCell.Offset(0, -1).Value = ""       With ActiveCell .FormulaR1C1 = "=MID(RC[-1],2,3)" .Offset(1, 0).Select End With Loop Range("A1").Select Do Until ActiveCell.Offset(0, 2).Value = "" With ActiveCell .FormulaR1C1 = "=RC[11]&RC[5]&Rc[8]&rc[9]&rc[3]" .Offset(1, 0).Select End With Loop

  • Excel2013>VBA>sendkeys動ず

    Excel2013のVBAを使って自動更新をしようと思っています。    A  B   C 1  あ  AA  0 2  い  AB  1 3  う  AC  0 4  え  AA  1 5  お  AA  0 上記のようにシート内にデータはあります。B列「AA」C列の「ゼロ」を更新してC列の値を「1」にしようとしたときに、ピボットテーブルを使ってみようと思いました。 ピボットテーブルにてB列の「AA」、C列の「ゼロ」を抽出表示しました。   A  B  C 1 あ  AA  0 5 お  AA  0 思っていたように1行目と5行目が抽出されました。 後はゼロを別の値(仮に「2」とします)に変更するときに、カーソルの移動がうまくいきませんでした。 Range("C1").End(xlDown).Select Do ActiveCell.Offset(0, 0) = "2" ActiveCell.Offset(-1, 0).Select If Len(ActiveCell.Offset(0, 0)) = 0 Then Exit Do End If Loop しかし、これではカーソルが「C4」に移動してしまいました。 ピボットテーブルでたたんでしまっても、カーソルは見えないセルに移動するようです。 そこで、下記のように変更しました。 Range("C1").End(xlDown).Select Do ActiveCell.Offset(0, 0) = "2" Application.SendKeys "{UP}" If Len(ActiveCell.Offset(0, 0)) = 0 Then Exit Do End If Loop これは、カーソルがまったく動かずに最初の地点にいたままでした。 そこで、次はTABで移動することにしました。 Range("C1").Select Selection.SpecialCells(xlCellTypeVisible).Select Do ActiveCell.Offset(0, 0) = "2" Application.SendKeys "{tab}" If Len(ActiveCell.Offset(0, 0)) = 0 Then Exit Do End If Loop これでもカーソルは動きませんでした。 どうにかしてsendkeysの動かし方、もしくは更新でもっとうまいやり方をご存知の方、是非教えてください。よろしくお願いいたします。

  • VBAの書き方を教えてください 3

    何度も申し訳ございません。 以前にもこちらで質問させて頂いている者です。 Sheet1のrange("A1")をVLOOKUPで検索後の文字を取得し、同じ名前のシートを検索し、さらにrange("A1000")をアクティブにしてここからコードをつなげて処理しています。 range("A1")の処理が終わったら、range("A2")の処理に入り、range("A3") range("A4")を続けて処理を行っているのですが、range("A4")でVLOOKUPの検索が空白の場合、On Error GoTo myErrorで次のrange("A5")の処理に入りますが、On Error Gotoは1回のみの処理しかできないみたいで、range("A5")が空白の場合、実行時エラー9が発生してしまいます。 教えて頂いたコードを解読し、On Error Resume Nextなどを使おうとしているのですが、上手くできません。 1から10まで質問しっぱなしなのですが、どなたかご協力を頂けないでしょうか。 とりあえず自分の必要なコードはある程度省いて、2つ分のみ記載します。 本来この後、10回同じ処理を行います。 よろしくお願い致します。 Private Sub 記帳_Click()  On Error GoTo myError1  Dim i As Long  Dim myFlg As Boolean    For i = 1 To worksheets.Count If worksheets(i).Name = Range("A1").Value Then myFlg = True Exit For End If Next i If myFlg = True Then With worksheets(i) .Activate .Range("A1000").End(xlUp).Select    ActiveCell.Offset(1, 0).Select   ActiveCell = Range("J1") ActiveCell.Offset(0, 1).Select ActiveCell = Range("K1") End With Else MsgBox "該当シートなし" End If myError1: On Error GoTo myError2 For i = 1 To worksheets.Count If worksheets(i).Name = Range("A2").Value Then myFlg = True Exit For End If Next i If myFlg = True Then With worksheets(i) .Activate .Range("A1000").End(xlUp).Select ActiveCell.Offset(1, 0).Select   ActiveCell = Range("J1") ActiveCell.Offset(0, 1).Select ActiveCell = Range("K1") End With Else MsgBox "該当シートなし" End If End sub

  • VBA withの使い方

    VBAの参考書で勉強をしていますが、withの使い方で引っかかっているので、どなたかご教授ください。Excel2002 よくある見積書の表で、横方向の掛け算を行方向下に連続して行おうとしています。 C列-数量 D列-単価  E列に、C列の数量×D列の単価 をVBAで行の先頭から下方向に順番に計算する。 その際に、C列の数量のセルが空白だったら何もせず終了という下記のループの方法が 参考書に書いてあります。(セルE14がE列の計算する最初のセル) Range("e14").Select Do Until ActiveCell.Offset(0, -2).Value = "" With ActiveCell .Value = .Offset(0, -2).Value * .Offset(0, -1).Value .Offset(1, 0).Select End With Loop 上記のwithの位置をDo~Loopの外に出して以下のように書き換えたら、 Range("e14").Select With ActiveCell Do Until .Offset(0, -2).Value = "" .Value = .Offset(0, -2).Value * .Offset(0, -1).Value .Offset(1, 0).Select Loop End With 最初のセルE14は正しく計算処理をするが、1つしたのセルにアクティブセルが移動した後、永久ループに入ってしまいます。 「デバック」ボタンをクリックすると[.Offset(1, 0).Select]の行が黄色くなっているのですが、どこに問題があるのかが分からない状態です。 お手数ですが、よろしくお願いします。

  • Excel VBAフォーム 登録ボタンの作成方法

    いつもお世話になっています。 初めて、Excelのフォームで入力画面を作りました。 複数の項目があって、それを最後に[登録]ボタンをクリックで 表に入れたいのですが、一度にまとめて実行する方法が分かりません。 アドバイスよろしくお願いいたします。 Private Sub cmd_1() Dim i As String If man.Value = True Then ActiveCell = man.Caption End If If woman.Value = True Then ActiveCell = woman.Caption End If ActiveCell.Offset(0, 1).Select End Sub Private Sub cmd_2() Dim i As String If man.Value = True Then ActiveCell = Yes.Caption End If If woman.Value = True Then ActiveCell = No.Caption End If ActiveCell.Offset(0, 1).Select End Sub Private Sub cmd_downlist() Dim ListNo As Long ListNo = group.ListIndex ActiveCell.Value = group.List(ListNo, i) ActiveCell.Offset(0, 1).Select End Sub Private Sub cmd_comment() ActiveCell = comment.Text ActiveCell.Offset(1, -3).Select End Sub

  • エクセル ユーザーフォーム 変数の定義

    エクセルでユーザーフォームを作成しました。 その中で郵便番号・住所を入れるテキストボックスがあるのですが、 郵便番号を入れると次のボックスに住所を表示させるのがかなり難しく、 自分で作成するほどのスキルは到底ないので、 下記のページにあったサンプルを利用して作成させて頂きました。 http://www.asahi-net.or.jp/~ef2o-inue/vba_o/sub05_130_050.html このページのサンプルだとシートのセルに飛ばないので、 シートのセルに飛ぶように下記のコードを入れました。 するとコマンドボタンを押すと 「変数を定義してください」 とエラーメッセージが出ました。 最初から自分で作成したフォーム上で下記のコードで実行した場合は うまくいったので行けるかと思ったのですが甘くありませんでした。 今までネットで調べたりしてマクロ等を使っていましたが、 変数は触ったことがなく未知の領域です。 こんな知識のまま手を突っ込むのは無謀かと思うのですが、 どなたかご教授いただけないでしょうか? 宜しくお願いいたします。 問題のコードはこちらです。 Private Sub cmdTouroku_Click() Range("B65535").End(xlUp).Offset(1).Select ActiveCell.Value = txtHinichi.Value ActiveCell.Offset(0, 1).Select ActiveCell.Value = txtKname.Value ActiveCell.Offset(0, 1).Select ActiveCell.Value = txtKumisu.Value ActiveCell.Offset(0, 1).Select ActiveCell.Value = txtName.Value ActiveCell.Offset(0, 1).Select ActiveCell.Value = txtParty.Value ActiveCell.Offset(0, 1).Select ActiveCell.Value = txtPartyp.Value ActiveCell.Offset(0, 1).Select ActiveCell.Value = txtSougei.Value ActiveCell.Offset(0, 1).Select ActiveCell.Value = txtMember.Value ActiveCell.Offset(0, 1).Select ActiveCell.Value = txtVisiter.Value ActiveCell.Offset(0, 1).Select ActiveCell.Value = ListBox1.Value ActiveCell.Offset(0, 1).Select ActiveCell.Value = txtPstyle.Value ActiveCell.Offset(0, 1).Select ActiveCell.Value = TXT_ZIPCODE.Value ActiveCell.Offset(0, 1).Select ActiveCell.Value = TXT_JUSYO.Value ActiveCell.Offset(0, 1).Select ActiveCell.Value = txtJusho2.Value txtKname.Value = "" txtKumisu.Value = "" txtName.Value = "" txtParty.Value = "" txtPartyp.Value = "" txtSougei.Value = "" txtMember.Value = "" txtVisiter.Value = "" txtPstyle.Value = "" TXT_ZIPCODE.Value = "" TXT_JUSYO.Value = "" txtJusho2.Value = "" UserForm1.txtHinichi.SetFocus End Sub

  • エクセルマクロについて

    最終行の1つ下の行に100000と入力したいですが Range("b65536").Select Selection.End(xlUp).Select ActiveCell.Offset(0, 1).Value = 100000 としてもうまく行きません Selection.End(xlUp).Select この部分だけで なんとかなるのでしょうか よろしくお願い致します

  • エクセルVBAで、複数のブックからデータベースを作りたい

    こんにちは。VBAをはじめたばかりの者です。 変数の使い方で教えていただきたいことがあります。 Dim myFLName As String myFLName = ThisWorkbook.Path & "\001.xls" Workbooks.Open Filename:=myFLName, ReadOnly:=True Workbooks("dbase.xls").Activate Range("A2").Select ActiveCell.Value = 1 ActiveCell.Offset(, 1).Select ActiveCell.Value = Workbooks("001.xls").Worksheets(1).Range("R3") ActiveCell.Offset(, 1).Select ActiveCell.Value = Workbooks("001.xls").Worksheets(1).Range("C2") ActiveCell.Offset(, 1).Select ActiveCell.Value = Workbooks("001.xls").Worksheets(1).Range("R2") ActiveCell.Offset(1, -3).Select 001.xls~(連番でない)200.xlsくらいまでのファイルがあり、 同じフォルダにdbase.xlsを作って1ブックから1レコードになるようにしたいと 思います。 こんな感じで1行目はできたのですが、2行目の1列目に「2」を入れ、 2列目からは001.xlsの次のブックを開いてセルの中身をコピーしたいのです。 変数の使い方がよくわからないのですが、教えていただけますでしょうか。 よろしくお願いいたします。

  • VBAについて

    いつもお世話になっています マクロ・VBA超初心者です。 質問させてください。 現在シート1の完売のセルの欄に○が入っていれば日付をみてシート2の同じ日付の隣のセルに○を入力しようと思っているのですが、シート2の日付を検索はしているんですが入力がいきません Sheet1  ↓セルA1 ↓セルB1  5月26日   26           B1のセルはDAY(A1)にて出してます         完売  A氏     ○             Sheet2  ↓A列   ↓B列 5月  1日  ・  ・  ・  26日    ○           ←シート1の所に○が付いているとシート1セルB1と同じ  27日                  日付の隣のセルに○を入力  28日 VBA Sub test() Sheets("Sheet2").Select Range("A1").Select Do Until ActiveCell = "" ActiveCell.Offset(1, 0).Activate If ActiveCell.Value = Worksheets("Sheet1").Range("B2") Then ActiveCell.Offset(0, 1).Activate If ActiveCell.Value <> "○" Then ActiveCell.Valu = "○" ActiveCell.Offset(0, -1).Activate Else ActiveCell.Offset(0, -1).Activate End If Else End If Loop Sheets("Sheet2").Select Range("A1").Select End Sub どこが間違っているかわからない状態です。 分かりにくい説明ではあるんですが教えてください お願いします。

専門家に質問してみよう