• 締切済み

エクセルのマクロでプログラムを作りたいのですが教えてください

まず一行目に48列のデータがあり、 2行目から32行目までにも同様に48列のデータがあります。 条件が1800以上の数値ならその列の1行めのデータを50行目に縦一列にどんどん出力させるというプログラムをつくりたいのです。 条件が偽の場合は空欄です。 下に途中まで努力したのですがどこをなおせばいいのかわかりません。 分かるかたいましたらご指摘お願いいたします。 Sub Macro1() Dim n As Integer For n = 1 To 31 Sheet1.Cells(n + 1, 50) = "=IF(Cells(n+1, 1)> 1800,A1,"""")" Sheet1.Cells(n + 31 * 1 + 1, 50) = "=IF(Cells(n+1, 2)> 1800,B1,"""")" Sheet1.Cells(n + 31 * 2 + 1, 50) = "=IF(Cells(n+1, 3)> 1800,C1,"""")" ・ ・ ・ ・ ・ Sheet1.Cells(n + 31 * 47 + 1, 50) = "=IF(Cells(n+1,48)> 1800,AV1,"""")" Next End Sub 宜しくお願い致します。

みんなの回答

  • loop_dog
  • ベストアンサー率32% (14/43)
回答No.2

同じ50行目ばかりに結果を書いていたら、 どこの行列の値か分からなくなると思います。 よって、50行目以降(←これ大事)に、結果を出力します。 とりあえず、自作サンプル。 (簡単には試したので、大丈夫かと) '結果用行 Dim ret_row As Integer ret_row = 50 '行 For i = 1 To 2 '列 For j = 1 To 4 If Cells(i, j).Value >= 1800 Then Cells(ret_row, j).Value = Cells(i, j).Value End If Next ret_row = ret_row + 1 Next

  • hana-hana3
  • ベストアンサー率31% (4940/15541)
回答No.1

>縦一列にどんどん出力させるというプログラムをつくりたいのです。 プログラムではセルに「式」を埋め込んでいるだけのようですが・・・。 プログラムで書き出す場合は、このようなことはしませんよ。 質問文からは具体的な条件や動作が理解できないので、質問に関しての回答はしませんが、式(ワークシート関数)では Cells(n+1, 2) は使えないので、セルアドレスがセットできるように変換しなくては行けません。 "=IF(" & Cells(n+1,48).address & "> 1800,AV1,"""")" ご希望の事が式でできるなら、フィルなどでコピーする方が悩まなくてよいでしょうね。

関連するQ&A

専門家に質問してみよう