• ベストアンサー

指定したセルに番号をつけていくマクロ

現在、画像をたくさん貼り付け、カタログを作っていて、番号を入れたらマクロで画像が配置されるというところまでできました。今度は、その、番号を指定したセルに書き込む作業をマクロでできないかと考えています。現在の私が作成したマクロが↓です。 Sub 画像1から60() Range("A4").Select ActiveCell.FormulaR1C1 = "1" Range("C4").Select ActiveCell.FormulaR1C1 = "2" Range("E4").Select ・・・   ActiveCell.FormulaR1C1 = "58" Range("q29").Select ActiveCell.FormulaR1C1 = "59" Range("s29").Select ActiveCell.FormulaR1C1 = "60" End Sub というふうにかなり長く、また、この番号が3000番くらいまであり、簡単にできないものかと試行錯誤しています。 初心者なりに、工夫したのは"600"と表記するのを"=60*10"とし、あとで*10を置換しています。それでも3000番はほど遠く何か方法がありましたら教えてください。

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

  • ベストアンサー
  • ok2007
  • ベストアンサー率57% (1219/2120)
回答No.2

No.1のirija_bariさんとほぼ同じ内容ですが、ご参考になれば幸いです。 > Range("A4").Select > ActiveCell.FormulaR1C1 = "1" これは、A4セルに数値1を記入せよ、というコードですよね。 そうであれば、以下のコードで代用できますヨ。 Range("A4") = 1 さらに、次のコードでも同じ処理がされます。 Cells(4, 1) = 1 このCells(a, b)を使うと、コードのパターン処理が簡単になります。 そこで、これを使って、例えば4行目のA列から1列おきに、同じく4行目のS列まで、1,2,3・・・と数字を記入したいときは、例えば次のようなコードにすると、簡単です。 For x = 1 To 10 Cells(4, x * 2 - 1) = x Next x さらに、4行目のA列から1列おきに、同じく4行目のS列まで、1,2,3・・・,10とし、2行飛んで7行目のA列から1列おきに、同じく7行目のS列まで、11,12,13・・・,20とし、また2行飛んで10行目のA列から1列おきに、同じく10行目のS列まで、21,22,23・・・,30とするには、例えば次のようなコードにすると、簡単になります。 For y = 1 To 3 For x = 1 To 10 Cells(1 + y * 3, x * 2 - 1) = (y - 1) * 10 + x Next x Next y (xとyは入れ替えても構いません。また、別のアルファベットを使っても構いません。) どのようなパターンで数字が並ぶのか、これを発見すれば、コードにするのは難しくないと思います。頑張ってくださいネ。 ※ コードの頭で以下のように変数を宣言するとより良いのですが、ややこしくなりそうなら無くても大丈夫です。ご存知のことかもしれません、蛇足でしたらごめんなさい。 Dim x As Long Dim y As Long ※ Range(a, b)やCells(a, b)は、それぞれ次のように後ろに.Valueを付けるとより良いのですが、これも、ややこしくなりそうなら無くても大丈夫です。こちらもご存知のことかもしれません、蛇足でしたらごめんなさい。 Range("A4").Value = 1 Cells(4, 1).Value = 1 Cells(4, x * 2 - 1).Value = x

nicedesu
質問者

お礼

補足まで教えて頂きありがとうございます。丁寧な質問でよくわかりました。ありがとうございました。

その他の回答 (2)

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

まだプログラムの利用のし方が判っていない段階ですね。 自分の書いたコードで、こんな同じような繰り返しが起こったら(書くとか考えるようになったら)、何か別の方法を考えるべきものです。 そしてコードの実例は挙げていても、そのルールが挙げられていないので、コードが回答者には推定でしか、組めない。 ルールを示して、回答者のコード例を得て、良い点は勉強することです。 私が言うルールとは、推定では 写真が第1行ー第3行まである 第4行に番号を入れる 横方向はA列の次ぎはB列をとばし、C列、次ぎはD列を飛ばしてE列らしい。 横方向に10列か?S列まで? たてには番号は6行か?第24行まで? ーー もし上記のようなことなら、 こういう場合は定石として 2重ネストを使う。 多分下記のようなものだろう。 いかに簡単になるか判るだろう。 Sub test01() k = 1 For i = 4 To 24 Step 4 For j = 1 To 20 Step 2 Cells(i, j) = k k = k + 1 Next j Next i End Sub

nicedesu
質問者

お礼

ありがとうございました。何となくマクロというものがわかってきました。きっとimogasiさんにすれば何にもわっかていないのでしょうが・・・もっと勉強していきたいと思います。

回答No.1

For i = 1 To 25 For j = 1 To 50 Cells(i, j).Value = (i - 1) * 50 + j Next j Next i 変数iが行番号に、変数jが列番号になります。 Range(場所).Select ActiveCell.FormulaR1C1 = 値 と書くより、 Cells(行番号, 列番号).Value = 値 と書くほうがスマートだと思います。 上記のようなコードだと、25行50列の表になります。 nicedesuさんのコードを見ると、4行目から1列おきに値を書き込んでいるので(ここでは5行おきに書き込むとして)、 For i = 1 To 25 For j = 1 To 50 Cells(4 + (i - 1) * 5, 1 + (j - 1) * 2).Value = (i - 1) * 50 + j Next j Next i となります。 あとは、このコードの値を適当に変えていけばよいのでは?

nicedesu
質問者

お礼

こんなに短いマクロでできるんですね。感動しました。ありがとうございました。

関連するQ&A