• ベストアンサー

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

現在、画像をたくさん貼り付け、カタログを作っていて、番号を入れたらマクロで画像が配置されるというところまでできました。今度は、その、番号を指定したセルに書き込む作業をマクロでできないかと考えています。現在の私が作成したマクロが↓です。 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/17068)
回答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

  • Excelでドロップダウンリストの作り方

    初心者です。 現在、多くの画像を貼り付けたカタログを作っています。そこで、画像を挿入して配置するところまではマクロでできるようになりました。 マクロは指定したセルに番号を入れたら画像が配置されるといったFindを使ったマクロにしています。この画像が3000種類ほどあって、1ページあたり60枚を貼り付けています。ですので、1ページは1~60番の画像、2ページは61~120番の画像といったふうにしたいと思っています。 現在は番号を指定したセルに配置されるように別のマクロも作っています。 Sub 画像1から60() Range("A4").Select ActiveCell.FormulaR1C1 = "1" Range("C4").Select ActiveCell.FormulaR1C1 = "2" ・・・ ここで、ドロップダウンリスト(ユーザーフォーム?)で1~60番、61~120番、121~180番といった項目がでてきて、それをクリックしたら上で作ったマクロで番号を配置させるということをしたいと考えています。 説明が下手で申し訳ないですが、わかる方教えてください。

  • マクロのセルの範囲指定

    こんにちは。マクロ初心者です。 今エクセルの業務でマクロを作成しようとしているのですが マクロ実行時にセルの範囲でマウスでセルを選んだところから マクロを実行させたいのですが(マクロを実行する際毎回場所が変わるので)そのようなセル指定方法はあったりしますでしょうか? 項目に関しては(BW4~BX4)は固定です。 関数に関しては(BW10~BW10)は月によっては BW20になったりと行が変わります。 Range("BW10").Selectのカッコ内を毎回変更すればいいのですが 項目が20以上ある為面倒です。 なにか良い方法がありますでしょうか? よろしくお願いいたします。 Range("BW4").Select ActiveCell.FormulaR1C1 = "商談明細NO桁数" Range("BX4").Select ActiveCell.FormulaR1C1 = "商談明細NO桁数2" Range("BW10").Select ActiveCell.FormulaR1C1 = "=CONCATENATE(0,RC[-70])" Range("BX10").Select   ActiveCell.FormulaR1C1 = "=RIGHTB(RC[-1],2)"

  • Excelでマクロを使いセルの内容をコピー貼り付け

    A1セルに111と入力してあるとします。 この時B1にaaa111aaaと入力するマクロを作りたいです。 A1に222があるとB1はaaa222aaaと入力したいです。 これをマクロで作ったのですが、次のようになり、A1の内容にかかわらず常にaaa111aaaとなってしまいます。 Sub Macro1() Range("A1").Select ActiveCell.FormulaR1C1 = "111" Range("B1").Select ActiveCell.FormulaR1C1 = "aaa111aaa" Range("B2").Select Application.Goto Reference:="Macro2" End Sub これのいらない行を削除し、コピーはA1の内容となるように修正して次のようにしました。 Sub Macro1() ActiveCell.FormulaR1C1 = Range("A1") Range("B1").Select ActiveCell.FormulaR1C1 = "aaa111aaa" Application.Goto Reference:="Macro2" End Sub まだペーストするときにA1の内容とならず直接入力となっています。 これをどう変更すればいいでしょうか?

  • ■ エクセルマクロについてです。初級?

    エクセルのマクロでデスクトップにあるエクセルファイルを開くにはどうしたらいいのでしょうか? 現在は、エクセルファイルA.xls B.xlsという2つを開いていて、マクロを実行することができるのですが、これをA.xlsだけ開いている上体で、実行したいのです。 なので、デスクトップに置いてあるB.xlsファイルを開くコマンド?というか、関数が知りたいのですが、どうしたらいいのでしょうか? 現在はこのような感じになっております。 Sub Macro2() ' ' Macro2 Macro ' マクロ記録日 : 2008/9/10 ユーザー名 : ' ' ActiveCell.FormulaR1C1 = "12345" Range("G17").Select ActiveCell.FormulaR1C1 = "129876" Range("G18").Select Windows("B.xls").Activate Range("N16").Select ActiveCell.FormulaR1C1 = "8/4/2008" Range("N17").Select ActiveWorkbook.Save Range("O16").Select ActiveWorkbook.Save ActiveWindow.Close End Sub

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

    Book1で入力データ作成し、保存次第、添付画像の黄色部分に、自動転記する様マクロを組みたいと考えています。 現在、勉強中で、簡単な下記の様なマクロはできました。 これを応用して実践してみたいのですが、何を加えればよいのか、アドバイス頂けたら幸いです。 --------- Sub Macro1() ' ' Macro1 Macro ' ' a = ActiveCell.Value Range("A2").Select ChDir "C:\Users\takana\Desktop" Workbooks.Open Filename:="C:\Users\takana\Desktop\転記.xlsx" Sheets("Sheet2").Select ActiveCell.FormulaR1C1 = "" Range("B2").Select ActiveCell.FormulaR1C1 = a Range("B3").Select End Sub -----------

  • Excel 2007 マクロ 表の集計

    Excel 2007 マクロ 表の集計 「Sheet1」に2つの表があります。 <元データ>の項目ごとに<集計結果>の 計の列に数字が反映されるようにしたいと考えています。 表の画像を添付します。 <元データ>の項目のアルファベットごとに<集計結果>の 項目に分かれます。 マクロの記録では下記にようになりました。 Sub Macro1() ' ' Macro1 Macro ' ' Range("B15").Select ActiveCell.FormulaR1C1 = "=R[-12]C+R[-11]C+R[-10]C" Range("B16").Select ActiveCell.FormulaR1C1 = "=R[-10]C+R[-9]C" Range("B17").Select ActiveCell.FormulaR1C1 = "=R[-9]C+R[-8]C+R[-7]C" Range("B18").Select End Sub どのようにすれば、マクロでアルファベットごとに集計できるのでしょうか。 よろしくお願いいたします。

  • PCのマクロについて

    Sub Macro1() ' ' Macro1 Macro ' ' ActiveCell.FormulaR1C1 = "○" Range("F5").Select End Sub Sub Macro2() ' ' Macro2 Macro ' ' ActiveCell.FormulaR1C1 = "●" Range("F5").Select End Sub こんな感じでマクロ入れたんですが図でわかると思うのですが4段目で確認未のボタンを押すと1段目のセルに選択が移動してしまいます。ボタンを押した際に最初に選択したセルから移動しないようにするにはどうすればよいですか?

  • EXCELのマクロについて

    お世話になっております。 以下のマクロを1万行分繰り返したいのですが、回数を1万回と指定する構文を 教えてください。よろしくお願いします。 Sub Macro16() ' ' Macro16 Macro ' ' Keyboard Shortcut: Ctrl+Shift+Z ' ActiveCell.Offset(1, 0).Rows("1:1").EntireRow.Select Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove ActiveCell.Offset(-1, 0).Range("A1:M1").Select Selection.Copy ActiveCell.Offset(1, 0).Range("A1").Select ActiveSheet.Paste ActiveCell.Offset(-1, 2).Range("A1").Select Application.CutCopyMode = False ActiveCell.FormulaR1C1 = "7/5/1905" ActiveCell.Offset(1, 0).Range("A1").Select ActiveCell.FormulaR1C1 = "7/6/1905" ActiveCell.Offset(1, -2).Range("A1").Select End Sub

  • Excell : 現在のカーソルがある行の特定の列に値を書き込むマクロ

    現在のカーソルがある行の特定の列に値を書き込むマクロの書き方を教えてください。以下は20行めのA列、B列にa, b を書き込むものですが、最初のRange("A20").Selectをカレント行に設定するコードを書けばいいのでしょうか?具体的な記述を教えてください。よろしくお願いします。 Sub Macro4() Range("A20").Select ActiveCell.FormulaR1C1 = "a" Range("B20").Select ActiveCell.FormulaR1C1 = "b" Range("C20").Select End Sub

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

    以下はセルB2.C2.D2.E2.F2をアクティブセルから右方向へ入力しています。ここでの入力とは"=" + "セルB2" というものです。一つずつ入力している為マクロが長くなります。短くシンプルなものにしたいです。ご教示お願いします。 ActiveCell.FormulaR1C1 = "=R2C2" ActiveCell.Offset(0, 1).Select ActiveCell.FormulaR1C1 = "=R2C3" ActiveCell.Offset(0, 1).Select ActiveCell.FormulaR1C1 = "=R2C4" ActiveCell.Offset(0, 1).Select ActiveCell.FormulaR1C1 = "=R2C5" ActiveCell.Offset(0, 1).Select ActiveCell.FormulaR1C1 = "=R2C6"

専門家に質問してみよう