Excelマクロで変数を使って式を入力する方法

このQ&Aのポイント
  • Excelのマクロを使用して特定のセルに式を入力するために変数を使用する方法を教えてください。
  • マクロで行を挿入し、セルの値を利用して式を入力したい場合、変数を使用することができます。
  • 具体的な例として、セルC2の値を使ってセルC4に式を入力する場合、次のようなコードを使用します。
回答を見る
  • ベストアンサー

Excelのマクロに変数で式入力

いつもお世話になります。 Excelのマクロをはじめたばかりの初心者ですが、いま、特定のセルを選び、一行下に挿入してから、ずらした行のセルに式を入力してオートフィルをかけるという作業をしています。 この特定のセルが次々と移動していくので、変数を使おうと思い、 Dim ro1, ro2, ro3, ro4 As Long Dim セル番地 As String として、 For myCnt = 1 To 15 ro1 = 2 ro3 = ro1 + myCnt * 2 セル番地 = "C" & ro3 と記述していきました。   そして Rows(ro3 & ":" & ro3).Select Selection.Insert Shift:=xlDown Range(セル番地).Select ActiveCell.Formula = "=C2*セル番地" と記述して(実際にはまだつづきます)実行したところ、行の挿入とオートフィルがうまくいくものの、式の入力がうまく出来ません。 実際のシートを見ると、数式として =C2*セル番地 が入力されています。 本来はこの数式を =C2*C4 としたいのですが、いろいろとサイトを調べてもよくわかりません。 どなたか、よくご存知の方、教えていただけないでしょうか。 まだ勉強中なので、根本的に勘違いしているところもあるかもしれませんが、よろしくお願いいたします。

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

  • ベストアンサー
  • kmetu
  • ベストアンサー率41% (562/1346)
回答No.1

"=C2*セル番地" としてしまうとセル番地も文字列として入力されます。 変数の値を入力したいのなら ActiveCell.Formula = "=C2*" & セル番地 ですよ。

その他の回答 (2)

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

>いろいろとサイトを調べてもよくわかりません。 当たり前。VBA利用としては、考え方(着眼点)が変わっている。 (1)そう言う式をオートフィルでいじくる方法もあるが、 マクロの記録を採ればコードはわかるので質問しなくてもすむ。 Sub test03() Range("A1").FormulaLocal = "=$c$2*C3" Range("A1").Select Selection.AutoFill Destination:=Range("A1:A10"), Type:=xlFillDefault End Sub 第3行目以下はマクロの記録から。 (2)コピー貼り付け方法 Sub test01() Range("A1").FormulaLocal = "=$c$2*C3" Range("A1").Copy Range("a2:A10") End Sub データ例 C2:C12 2 3 1 4 5 2 7 1 4 5 6 として 結果 A1:A10 6 2 8 10 4 14 2 8 10 12 確認は各セルをポイントして、スウシキバーを見る。 関数の役割で、VBAでやる意味は少ない。 (2)普通のVBAでは、式をプログラムに書いて、計算し、結果(セルの値を)をセルにセットする。 Sub test02() For i = 1 To 10 Cells(i, "D") = Range("c2") * Cells(i + 2, "c") Next i End Sub 結果はD列に出す。 A列の上例と同行対応。結果は同じ。 ーー 初心者であるがために、初心者には難しい珍奇なやり方に拘って、質問しているのだと思う。 もっと例題集で色々な場合を丹念に集めて、読むべき。質問はその後。

  • pp300a
  • ベストアンサー率12% (11/87)
回答No.2

Dim ro1, ro2, ro3, ro4 As Long まず この使い方は間違いです Dim ro1 As Long ,ro2 As Long ・・・となります こうしないと最後のもの以外はVariant型になります さて、 ActiveCell.Formula = "=C2*セル番地" これは "=C2*セル番地" という文字をセルに埋め込んだだけです Activecell.Value= "=C2*セル番地" と同じです ワークシート側ではVBAの変数は使うことができません

関連するQ&A

  • オートフィルマクロで作り、パラメータを変数にす方法

    EXCEL2007にて textBoxに入力された値を オートフィルのパラメータに指定したいのですが、 どのように記述すれば良いかわかりません。 Dim a As Integer a = TextBox.Text この変数aをオートフィルのパラメータにするにはどうすれ良いでしょうか? TextBoxに"10"と入力した場合、 A1:A10までオートフィルするためのマクロです。 ..........|A|B|C .....1..|10 .....2..|10 .....3..|10 .....4..|  .....5..| .....6..| .....7..| 初心者のため説明不足で申し訳ないのですが、 よろしくお願いいたします。

  • エクセルで、オートフィルで、~個おきに参照するなどの数式を簡単に入力する方法について

    エクセルのオートフィルの仕方で、分からない点があり、お教え下さい。例えば、A1からZ1までのセルに、ランダムな数値がはいっているとします。A2に”=A1”、B2に”=C1”、C2に”=E1”、D2に”=G1”などのセル参照の数式をいれるときは、A2に”=A1”と入力した後、オートフィルのように簡単に連続して1個おきの次のセル参照(B2に”=C1”、C2に”=E1”・・・)を入力する方法はあるのでしょうか。つまり”~個おき”のセル参照を連続入力(オートフィル)する方法をお教えいただけないでしょうか。宜しくお願いします。

  • エクセル マクロ データー入力時

    現在、勤務表を作成しております。 そこで入力をPCが慣れていない人でも扱えるように シート上にリストボックスを作成 リストクリックすると ↑ {夜勤 日勤 休日 有給 ○~/ //// }←連続記号も入れています。 のようにリストがあり、そこで選択して 勤務表のセル上にてクリックすると 上記の記号や文字又は連続記号を挿入させたいです。 色々調べましたが下記の内容で良いのでしょうか? もっと詳しく記述が知りたいです。 お願いします。  Private Sub Worksheet_SelectionChange(ByVal Target As Range) 'マウスをシート上でクリックしたときの動作 'データ入力や削除など、コンボボックスで選択する Dim S As String Dim S2 As String その後の記述が困難です。 例えば A1~C3までの表に 挿入したい場合の記述を教えて下さい。

  • マクロ セルに記載された回数をループさせたい

    セルに記載されたマクロをループさせたいと思っているのですが どうしたらいいのか分からなかったので質問させていただきます。 下の記述ですと「CommandButton1」に記載したマクロを5回繰り返し 終了となるのですが、たとえばSheet1のA1に入れた数値分だけ 繰り返すマクロを組む場合どのように記述したら良いでしょうか? <記述マクロ> Dim myCnt As Long myCnt = 1 Do Until myCnt > 5 CommandButton1.Value = True myCnt = myCnt + 1 Loop よろしくお願いします。

  • エクセルマクロの使い方。繰り返し参照の仕方について

    セルに他のシートの数式を参照して繰り返し入力したいのですが、 どうしてもエラーが出てしまいます。教えて下さい。 Sheets("集計結果").Select Dim x As Integer Dim y As Integer For x = 2 To 100 For y = 2 To 700 Step 7 x = 2 y = 2 Range("C" & x).Select Worksheets("集計結果").Range("C" & x).Formula = Worksheets("条件").Range("G" & y) Next y Next x どこが悪いのでしょうか?

  • 【Excel】複数条件の論理式をVBAマクロでオートフィルするには?【エクセル】

    セルF2からF5000までは =VLOOKUP(C2,sp_csv!C:H,6,0) という関数をオートフィルで入力できるようにマクロを組みました。 Sub Macro1() セル範囲 = "F2:F5000" 数式 = "=VLOOKUP(C2,sp_csv!C:H,6,0)" Range(セル範囲).Formula = 数式 End Sub 同様にセルG2からG5000は =IF(AND(E2>0,F2=0),"削除",IF(AND(E2=0,F2>0),"新規","変動なし")) という関数を入れてオートフィルさせたいのですが、コンパイルエラーが出てしまいます。 Sub Macro2() セル範囲 = "G2:G5000" 数式 = "=IF(AND(E2>0,F2=0),"削除",IF(AND(E2=0,F2>0),"新規","変動なし"))" Range(セル範囲).Formula = 数式 End Sub 複数条件の論理式をVBAマクロでオートフィルするにはどうしたらいいのでしょうか?

  • エクセルでのマクロについての質問です

    毎日行数の違うデータの隣に数式を入力してフィルでコピーしていますが簡易のマクロを組んでみました。ですが行数が変わるためマクロ登録した時の行数までしか数式がコピーされません。 画面1のようにC1、D1セルの数式をフィルでコピーしたマクロを登録しました。画面2のようにデータが多くなるとC5、D5までしかコピーされません。最初はC1、D1だけに数式を入力してマクロ実行後、フィルでコピーしていましたが面倒な為、現在は行数を多く設定していますが無駄に数式が入るためにデーターが重くなります。マクロでB列の最下セルを検索しその列までC,Dセルをコピーというなマクロが出来るなら教えて頂きたいです。VBAの知識を必要とすると思いますがよろしくお願いします。

  • エクセルのマクロでの数式の入力に関しての質問です。

    エクセルのマクロでの数式の入力に関しての質問です。 特定のセルに =セルと同一行のA列の値 + セルの同一行のB列の値 というような数式を入力したいのですが 同一行の列の指定方法がわかりません。  例) 特定セル=C1 結果:C1=A1+B1 特定セル=C3 結果:C3=A3+B3 どなたかご教授よろしくお願いいたします。

  • EXCELのVBAですが。

    EXCELのVBAですが。 Sub macro1() Dim mycnt As Integer Dim sheet_name1 As String Sheets("kekka").Select Range("A1").Select Sheets("shiji").Select mycnt = Range("B1").Value sheet_name1 = Range("c" & mycnt) Sheets("kekka").Select Sheets("kekka").name = sheet_name1 Sheets("kansuke").Select Sheets("kansuke").Copy Before:=Workbooks("2007年報告.xls").Sheets(3) End Sub (やりたいこと) B1に入っている数値でC1からC10に入っているあるシートの名前(たとえばkansukeとする)を取り、その名前で kekkaというシート名をkansukeという名前に変える。 名前を変えたkansukeというシートを別の2007年報告というbookにコピーを転送する。 (質問)上のコードで実はkansukeと書いてあるところは,B1の値次第で当然いろいろに 変化するため、そのシート名にとらわれない書き方をしたいのですがどう記述すればいいのか わかりません。以上お願いします。

  • エクセルでオートフィルを使って『ABC・・・』と入力できますか?

    大変急いでおります。よろしくおねがいします。 エクセルで1セルずつ、A、B、C・・・Zと入力していきたいのですが、 こちらをオートフィルなどを使ってやることはできませんでしょうか? (簡単にできるのだったらオートフィルじゃなくてもかまいません) 同じく、あいう・・・のほうでも対応できるとなおうれしいです。 くわしいかたよろしくおねがいします!

専門家に質問してみよう