• 締切済み

マクロのコードをご教授下さい。大変困っております。

画像貼付のマクロの作成について 環境はwindows7 Excel2013 うまくコードが組めないのでコードのご教授お願いいたします。 マクロの記録を使ってもどうもうまく行かず壁にぶち当たっております。 sheet1のE列の画像をsheet2のE列に貼り付けるマクロを作成中なのですが、 sheet1の画像は(デジカメで撮影した画像です。) E10~E19 E30~E39 E50~E59 E70~E79  ・  ・  ・ E410~E419 まであります。10行ずつ11行飛ばして419行まで貼り付いています。 これをsheet2のE列に貼り付けるマクロをお尋ねしたいです。 sheet2の貼り付け先は以下の通りです。 14行空けながら5行ずつ貼り付けて18行空けてまた5行貼り付けていくのを繰り返します。 sheet1 E10 → sheet2 E5(E5~H16を結合しています) sheet1 E11 → sheet2 E19(E19~H30を結合しています) sheet1 E12 → sheet2 E33(E33~H44を結合しています) sheet1 E13 → sheet2 E47(E47~H58を結合しています) sheet1 E14 → sheet2 E61(E61~H72を結合しています) sheet1 E15 → sheet2 E79(E79~H90を結合しています) sheet1 E16 → sheet2 E93(E93~H104を結合しています) sheet1 E17 → sheet2 E107(E107~H118を結合しています) sheet1 E18 → sheet2 E121(E121~H132を結合しています) sheet1 E19 → sheet2 E135(E135~H146を結合しています) sheet1 E30 → sheet2 E153(以下、同様に結合しています。) sheet1 E31 → sheet2 E167    ・     sheet1 E32 → sheet2 E181    ・ sheet1 E33 → sheet2 E195    ・ sheet1 E34 → sheet2 E209    ・ sheet1 E35 → sheet2 E227    ・ sheet1 E36 → sheet2 E241    ・ sheet1 E37 → sheet2 E255    ・ sheet1 E38 → sheet2 E269    ・ sheet1 E39 → sheet2 E283    ・   ・       ・   ・       ・   ・       ・ sheet1 E410 → sheet2 E2965   ・ sheet1 E411 → sheet2 E2979   ・ sheet1 E412 → sheet2 E2993   ・ sheet1 E413 → sheet2 E3007   ・ sheet1 E414 → sheet2 E3021   ・ sheet1 E415 → sheet2 E3039   ・ sheet1 E416 → sheet2 E3053   ・ sheet1 E417 → sheet2 E3067   ・ sheet1 E418 → sheet2 E3081   ・ sheet1 E419 → sheet2 E3095(E3095~H3016を結合しています) 2重のループ処理あるいは2つの変数を使うループ処理で組んでみましたが、 うまくいきません。 貼付元と貼付先のレイアウトが同一の場合の自動貼付マクロはうまく組めたのですが、 レイアウトに相違がある場合ロジック的にもコード的にも先に進めなくなっています。 この画像の貼付のループ処理のマクロはどのように記述するのが正解でしょうか? また、 貼付元(sheet1のE列)に画像のない行があったらループを抜ける処理や セルのサイズが違うため貼付先で画像が中央に貼り付いて周りに余白でできるような処理を入れたい場合のコードはどのようになりますでしょうか? いろいろと試行錯誤しましたがうまくいかないため、 詳しい方、お分かりの方にご教授頂けますと大変助かります。 よろしくお願い致します。

みんなの回答

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

回答があまりでませんでしたね。ややこしいことはややこしい問題と思った。 回答者の場合の特殊例であって、読者にはパターン的に興味を引く問題ではないように思うからそうなったのかな。 >2重のループ処理あるいは2つの変数を使うループ処理で組んでみましたが この路線の考えでやってみました。 '===Sheet1のE列の行番号 'スタートは10、終わりは仮に400とした '20単位で=Step 20 'iは1づつ増やして毎回繰り返し '増やす数iが9を超えると次の繰り返しへ '====Sheet2のE列 '初期値 5、階差14 標準モジュールに '============ Sub test01() k = 1 l = 5 For j = 10 To 400 Step 20 For i = 0 To 9 'If i > 19 Then Exit For Cells(k, "A") = j + i Cells(k, "B") = l 'Sheet2の系列の行番号の先頭行 '--- k = k + 1 '次の行のA列のセルに数をセット l = l + 14 Cells(k, "B") = l Next i Next j End Sub 実際の環境が当方にはない、また説明が十分ではないので、十分理解している自身もなく、十分なテストができないので、参考になる点があれば、参考にして、使えたら使ってください。 >2つの変数を使うループ処理 ループに関する変数は少ない方がよいと思うが、初めは余り窮屈に考えず、(プログラムの中で)ふんだんに使って、あとからよく考えて、減らせる(ある変数が別の変数に関連付けられる)ものは(ある変数から別の変数を導出して)減らすようにしたら。

  • f272
  • ベストアンサー率46% (8027/17155)
回答No.1

全部で210枚の画像があるのですね。 for i= to 210 s=(i-1)+(INT((i-1)/10)+1)*10 d=(i-1)*14+1+(INT((i-1)/5)+1)*4 'ここでsheet1のs行目の画像をsheet2のd行目にコピーする next i

関連するQ&A

  • SUMIF関数の集計が上手くいきません。

    「集計」シートのA列に得意先コード・O列に集計欄 「貼付」シートのE列に得意先コード・J列に集計欄があります。 なお、「貼付」シートのE列は重複する場合もあります。 「集計」シートのA列の値を、「貼付」シートのE列から探して、その行のJ列の数値の合計を 「集計」シートのO列に集計したいと思っています。 「集計」シートのA406が「B」で「貼付」シートのE200とE300が「B」で、「貼付」シートのJ200が「150」 ・J300が「250」であれば「集計」シートのO406に「500」(150+250)を表示させたいと思っています。 なお、「貼付」シートのE列には他に「B」の値がないものとします。 そこで、O列に次の関数を入れました。 「=SUMIF(貼付!E:E,A403,貼付!J:J)」 すると、(O4:O405)の範囲では、きちんと「貼付」シートの、各得意先コード別の合計が表示されるの ですが、O406の値が「0」と表示されます。 数式は合っていると思うのですが、何が誤っているのか、わかるかたはいらっしゃいますか? 406行目がA列に得意先コードが入っている最終行であることも関係ありますか? あるいは、どのように集計したら良いのか、教えていただけると助かります。

  • エクセルのマクロ記述について

    下記の処理をエクセルのマクロで行いたいのですが、どのように記述したよいか教えてください。 4行目から入力されている行まで下記の処理をマクロで行う。 1.J列のセル入力がCIRCLEの行で、B~E列の数値が同じセル間を結合する。 2.K列のセル入力がCIRCLEの行で、F~I列の数値が同じセル間を結合する。 3.J列のセル入力がOBLONG_XまたはOBLONG_Yの行で、B,D列及びC,E列の数値が同じ場合、B列をB列の数値XC列の数値とし、B~E列のセルを結合する。 4.K列のセル入力がOBLONG_XまたはOBLONG_Yの行で、F,G列及びH,I列の数値が同じ場合、F列をF列の数値XG列の数値とし、F~I列のセルを結合する。 5.J列のセル入力がOBLONG_XまたはOBLONG_Yの行で、B,D列及びC,E列の数値が同じでない場合、B列をB列の数値XC列の数値とし、B,C列のセルを結合する。又、D列をD列の数値XE列の数値とし、D,E列のセルを結合する。 6.K列のセル入力がOBLONG_XまたはOBLONG_Yの行で、F,G列及びH,I列の数値が同じでない場合、F列をF列の数値XG列の数値とし、F,G列のセルを結合する。又、H列をH列の数値XI列の数値とし、H,I列のセルを結合する。 7.J列のセル入力がSHAPEの行で、B~E列は何もしない 8.K列のセル入力がSHAPEの行で、F~I列は何もしない

  • 【Excel VBA】ThisWorkbook モジュールのマクロ

    Excel2003を使用しています。 39枚のシートから成るBook1のThisWorkbook モジュールに、C列に“○月計”と入力されたら、その行のE列、F列、G列へ数式を入力するコードを書いています。 現在は、それぞれのシート(39枚のシートのうち3枚を除く36枚)のC列最終行から2行下のセルへ“○月計”と手入力していますが、マクロで“○月計”と入力されるようにすれば、ThisWorkbook モジュールに書いているコードも実行されて、数式の入力までマクロで処理できるのかな?と思い、試しに、36枚それぞれシートのC列最終行から2行下のセルへ“○月計”と入力されるようコードを書いてみました。 …が、そうではないのか、それぞれのシートのC列最終行から2行下のセルへ“○月計”と入力されるものの、E列、F列、G列へ数式は入力されません。 せっかくなので、できることなら数式の入力までマクロで処理したいのですが、どのようにしたらThisWorkbook モジュールに書いているコードまで実行されるのでしょうか? よろしくお願いします。

  • 並び替えて結合するマクロ

    掲載例のように、E列には昇順で結合し、F列にはそのままの順番で結合するマクロをご教示いただけるでしょうか。 要件は2つあります。 1.4行目のように1つでも空白があると、処理しません(E、F列を空白にする)。 2.A~Eは必ず1つ、Fは1つだけのときと2つ出現するときがあります。

  • エクセルマクロでセルの結合をしたい

    エクセル2003です。 E列の値は昇順で並んでいます。 先頭E3行から下の行の値と比較し 同じ値の場合はセルを結合し 値が違う場合は結合しないで次の行を比較という処理を 最終行まで行いたいです。 (添付画像参照) 例えば E3-AA E4-BB E5-BB E6-CC E7-DD E8-EE E9-EE E10-EE E11-FF セルE4とE5を結合します セルE8とE9とE10を結合します。 次に結合した行と同じ行数のF列を結合します。 さらに結合した行と同じ行数のG列を結合します。 上記の場合 セルF4とF5を結合、 セルF8とF9とF10を結合します。 セルG4とG5を結合、 セルG8とG9とG10を結合します。 さらに結合した行と同じ行数のA列を結合します。 上記の場合 セルA4とA5を結合、 セルA8とA9とA10を結合します。 さらに結合したA列に数字を入力します A4とA5を結合したA4、A5セルには 2行を結合したので2と入力 セルA8とA9とA10を結合したA8、A9、A10セルには 3行を結合したので3と入力。 とりあえず、E列の結合を完成させてそのE列を 3行目から最終行までコピーして、 「形式を選択して貼付」の「書式」で 書式のみをF,G,A列にコピーすれば出来るのではと 以下の構文を作成しました。 セルの結合時は結合するセルの先頭の行の値が結合済セルの値に なるので最初にE列を結合していく時に A列に結合回数を記入しようと考えました。 ただ2行の結合は、A列に2と入力されたのですが 3行連結した時も2と入力されてしまったので改造しました。 テストデータでは期待しているようになったのですが 本番データでは結合される行が4行、5行等それ以上の行数が 結合する場合が有りこの構文ではなるべくしてなっているのですが 4行以上の行結合はA列の値はいずれも3になってしまいます。 (添付画像参照) どう修正すればいいか手段が考え付きません。 どのような方法がありますでしょうか? よろしくお願いします。 Sub セル結合2() '2013年10月25日 Dim 最終行 As Integer Dim 処理行 As Integer Dim 比較行 As Integer Dim 確認値 As Variant Dim 比較値 As Variant Dim 結合回数 Dim 戻行 Application.ScreenUpdating = False ThisWorkbook.Sheets("Sheet1").Select 最終行 = Cells(Rows.Count, 5).End(xlUp).Row 'F列の最終行を求めます。 Application.DisplayAlerts = False For 処理行 = 3 To 最終行 '3行目から最終行の前まで繰り返します。 比較行 = 処理行 + 1 '処理行の一つ下の行と比較します。→比較行とします。 確認値 = Cells(処理行, 5).MergeArea(1, 1).Value 'チェックする値を、確認値に代入します。 比較値 = Cells(比較行, 5) '比較する値を、比較値に代入します。 If 確認値 = 比較値 Then '値が同じかどうか Range(Cells(比較行, 5), Cells(処理行, 5)).MergeCells = True 結合回数 = Cells(処理行, 1) + 1 'セルを結合した回数 戻行 = 処理行 - 1 '処理行の1行上の行数を戻行とする Cells(処理行, 1) = 結合回数 '処理行のA列に結合回数を記入 Cells(比較行, 1) = 結合回数 '比較理行のA列に結合回数を記入 If Cells(処理行, 1) >= 3 Then 'もしも処理行のA列が3以上の場合 Cells(戻行, 1) = 結合回数 '戻り行のA列に結合回数をセット End If '同じでない場合は以下へ End If '同じでない場合は以下へ Next 処理行 Application.DisplayAlerts = True Application.ScreenUpdating = True Range(Cells(3, 5), Cells(最終行, 5)).Copy Range(Cells(3, 6), Cells(最終行, 6)).PasteSpecial Paste:=xlPasteFormats Range(Cells(3, 7), Cells(最終行, 7)).PasteSpecial Paste:=xlPasteFormats Range(Cells(3, 1), Cells(最終行, 1)).PasteSpecial Paste:=xlPasteFormats Application.CutCopyMode = False MsgBox "終了しました" End Sub

  • 【マクロ】初心者です。色々教えていただきたいことがありますのでご教授く

    【マクロ】初心者です。色々教えていただきたいことがありますのでご教授ください。 やりたいことは下記になります。 元データ A B C 1 2 3 4 5 6 新データ D E F 3 1 2 3 1 2 6 4 5 6 4 5 かなり簡略化で書いていますがやりたいことを記述していきます。 (1)マクロの記述しているブックのシート1にボタンを作成する。 ボタンから別のブックの元データ(CSVファイル)を選択。 元データのブックのシート1をマクロブックのシート2にコピーします。 コピーデータを加工、修正していきます。 (2)次に列のデータを入れ替えます。 これは法則がないので一行目の行をみて判断します。 (ex.C行の列ならD行に挿入する) (3)列を入れ替えた後、 3 1 2 6 4 5 になっていますがこれを 3 1 2 3 1 2 6 4 5 6 4 5 というふうに一行を二行にしていきます。 (4)最後にorder byします。 1、3、2列目の順にorder byします。 以上がやりたいことになります。 特に(1)がよくわからずボタンを使用時に 別ブックのデータをコピー、貼り付けるのは どうしたらいいのでしょうか? どなたかご教授ください。 よろしくお願いします。

  • Excel 2007 マクロ 表の集計について

    Excel 2007 マクロ 表の集計について 2つのシート(Sheet1とSheet2)の情報を集計して Sheet3に反映するマクロを考えています。 (1)Sheet1のC列、D列、E列とSheet2のC列が空欄の場合は  Sheet3に反映しません。 (2)Sheet1のC列、D列、E列とSheet2のC列のいずれかに数値が  入っている場合にはSheet3に行を反映します。  ※Sheet3に反映する際に、Sheet1とSheet2のキー(A列)は  反映しません。  各Sheetの表は画像を添付します。  どのようなマクロを作成すればよろしいでしょうか。  マクロの超初心者です。  マクロのサンプルをご紹介頂けますでしょうか。

  • エクセルマクロ:空白行を除いてコピー

    マクロで次の作業を処理したいのですが、どのようなコードを書けばよいのでしょうか?教えてください。よろしくお願いします。 ○sheet1 ☆左側 列B~Hをワンセットとしたものが、計51行ある。先頭はタイトル行で9行目である。 D列には固定の文字列が与えられており、E列はブランクで、D・Eともに非表示にしておきたい。 B10~B59には、固定で1~50の数字が順番に与えられている。 C10~C59、G10~G59、H10~H59には数値が、F10~F59には文字列が入力される。 空白の場合もあり、どの行に入力されるかは不明。 ☆右側 列J~Pをワンセットとしたものが、計51行ある。先頭はタイトル行で9行目である。 J10~J59には、固定で51~100の数字が順番に与えられている。 K10~K59、M10~M59、O10~O59、P10~P59には数値が、L10~L59、N10~N59には文字列が入力される。 空白の場合もあり、どの行に入力されるかは不明。 ○sheet2 sheet1のボタンをクリックし、sheet2を表示させ、 sheet1の値を次のようにsheet2に貼付けたい。 sheet2のB8~H107の範囲内で上から、sheet1の左側B10~H59と右側J10~P59の空白を含む行を除いた セット(列B~H、列J~P)のみをコピーし、左側と右側を連続して、値のみ貼付けたい。 ※C列とK列の空白を判定すれば良い ※並べ替えなどのために別シートを置きたくない ※非表示列の扱い方

  • 仕事で使用するマクロのコードをご教授下さい。

    仕事で使用するマクロのコードをご教授下さい。 自力でやってみたのですが行き詰ってしまったので、 詳しい方どうぞよろしくお願いします。 ■下ようなテキストデータがあります。  これをエクセルで開き(1)~(3)の処理をするマクロを作りたいです。 ・エクセルで開くとA列にそれぞれ1文として入力されています ・マクロが完成したら、数百個のファイルでこのマクロを動かす予定です ・OUTPUT側のファイル(シート)は1つにまとめたいです ! hostname ABCDEFG ! vlan internal allocation policy ascending vlan access-log ratelimit 2000 ! vlan 220-221 ! vlan 777,827-828 ! vlan 2105-2107,3100-3103 ! (1)「vlan 数字」から始まる行だけ取得したい(数字だけ取得したい) (2)「-」は数字の連番を表しているが、間に入る数の分だけ空白セルを入れたい  例:220-221なら220,221(空白セル無し)    3100-3103なら3100,  ,  ,3103  ※できれば3101,3102など間の数字を自動入力したい(出来なければ後から手入力します)  ※区切り文字でセルを分ける、横一列を縦一列に入れ替える作業は出来ました。 (3)「hostname ABCDEFG」の"ABCDEFG"部分だけ取得したい  ※C列に入力されている行数分B列に入力したい      A     B     C     D 1         ホスト名  vlan ID 2         ABCDEFG   220 3         ABCDEFG   221 4         ABCDEFG   777 5         ABCDEFG   827 6         ABCDEFG   828 7         ABCDEFG   2105 8         ABCDEFG   2106 9         ABCDEFG   2107 10        ABCDEFG   3100 11        ABCDEFG   3101 12        ABCDEFG   3102 13        ABCDEFG   3103 (1)~(3)の処理を行い、最終的に上記のような形で表を作りたいのですが、 コードを教えていただけないでしょうか。 また、14行以降には次のファイルのデータを続けて入力していきたいです。

  • マクロの条件別分岐について

    集計表のマクロを作成しています。 その際に条件によって、使用するマクロを使い分けたいと思っていますが上手くいきません。 次のように、E列に倉庫コード・G列に数量が表示されている書式を使用しています。 (例)  (E列)(G列) 1  22B  0 2  31A  1 3  54A  0 4  456  40 5  65C  41 6  32B  60 7  33A  40 ※1行目から300行目まで文字が投入される可能性があります。 そして、次の条件によって、使用するマクロを分岐したいと思っています。 「1」.E列で文字列"B"が含まれている   かつ その行のG列の数量が1以上 の組み合わせがある 「2」.E列で文字列"B"が含まれていない かつ その行のG列の数量が1以上 の組み合わせがある 「1」「2」2つの条件に当てはまる場合は「a」の処理 「1」の条件にのみ当てはまる場合は「b」の処理 「2」の条件にのみ当てはまる場合は「c」の処理 (「1」「2」のどちらにも当てはまらない場合は無いので省略) ちなみに処理の内容は次のとおり 「a」:A・B2つのピボットテーブルを作成する 「b」:Bの1つのピボットテーブルを作成する 「c」:Aの1つのピボットテーブルを作成する 例の場合の処理は次のようになります。 ●1行目はセル(E1)は"B"が含まれているが、セル(G1)の数量が 1以上ではないので、「1」にも「2」にも当てはまらない。 ●2・4・5・7行目はE列に"B"が含まれていなくて、G列が 1以上なので「2」の条件 ●3行目はE列に"B"が含まれていないものの、G列の数量が 0なので「1」にも「2」にも当てはまらない。 ●6行目はE列に"B"が含まれていてセル(G6)の数量が1以上 なので「1」の条件 よって「1」「2」のそれぞれにあてはまる行があるので「a」の処理を行う。 セル範囲(E1:G300)の全ての行に関して上記の「1」「2」の条件に当てはまるか検索して、それぞれ当てはまった条件によって「a」「b」「c」の処理を行うようにしたいです。 (例)の場合だったら 6行目まで検索した時点で「a」の処理が決定します。 Select Case のマクロを使用したら良いと思ったが、どのようにマクロを記述したらよいのか解らないので教えていただけると助かります。 イメージとしては Select Case (1から300行目で「1」と「2」の条件に当てはまる行がある場合) 処理「a」を行う。 Select Case (1から300行目で「1」の条件に当てはまる行はあるが「2」の条件にあてはまる行はない場合) 処理「b」を行う。 Select Case (1から300行目で「2」の条件に当てはまる行はあるが「1」の条件にあてはまる行はない場合) 処理「c」を行う。 というところまではわかりますが、括弧の中の記述方法が分かりません。あるいは別の処理があれば教えていただけると助かります。

専門家に質問してみよう