- 締切済み
EXCEL VBA コピーしたシートへ値をコピペ
選択対象シート数は4つで、シート名は、「101」「102」「103」「104」とします。 シート名「表紙」のA列のセルはA10:101 A11:102 A12:103 A13:104となっており、 使用者はとなりのB10~B14セルに「○」「×」を入力規則から選択します。 また、シート名「表紙」のB6セルには製造番号(例:AM01-130012)を入力しておきます。 「○」となっているシートのみ選択して、下記マクロにてコピーを作成します。 コピーしたシートすべてのB2セルに製造番号を入力します。 ここまではできていて、下記のプログラムを追加したいのですが、うまくいきません。 さらに、○を付けたのと同じ行のD10~L10、D11~L11、D12~L12、D13~L13セルに、 使用者が文字列を入れる場合と入れない場合があります。文字列は左のD列から順に入れます。 文字列があれば、○を付けてコピーした対応するシートの中のH3~P3セルへ貼り付けたいのです。 D10、D11、D12、D13セルが空白のときは何も処理は行わないとします。 たとえば、下記のようにB12セルが○で、D12セルに文字列があれば、 D12~L12セルの値を、コピーで作成したシート103の中のH3~P3セルへ貼り付けたいのです。 B11セルも○ですが、D11セルに文字列がないのでシートのコピーだけ行います。 アドバイスいただけると助かります。 VBA初心者で申し訳ございませんが、よろしくお願いいたします。 <表紙のシート> A B C D E F G H I J K L 5 6 AM01-130012 7 8 9 10 101 × 11 102 ○ 12 103 ○ A1-1 A1-2 A1-3 A1-4 A1-5 A1-6 A1-7 A1-8 A1-9 13 104 × <プログラム> Sub TestSample() If Application.CountIf(Worksheets("表紙").Range("B10:B17"), "*○*") = 0 Then MsgBox "部品番号が選択されていません。" Exit Sub End If Dim 製造番号 As String 製造番号 = Range("B6").Value Dim c As Range Dim flg As Boolean On Error Resume Next flg = True ThisWorkbook.Activate On Error GoTo ErrOut_ For Each c In Worksheets("表紙").Range("B10:B13") If c.Value Like "○*" Then Worksheets(c.Offset(, -1).Text).Select flg flg = False End If Next c If Not flg Then ActiveWindow.SelectedSheets.Copy ' コピーしたすべてのシートに製造番号を書き込む For Each 各シート In Worksheets With 各シート .Activate Cells(1, 2) = 製造番号 End With Next Exit Sub ErrOut_: MsgBox """表紙""シートに記載されたシート名" & c.Offset(, -1).Text & "は存在しません。, vbInformation" End Sub
- kz_in
- お礼率61% (8/13)
- Excel(エクセル)
- 回答数2
- ありがとう数1
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- cj_mover
- ベストアンサー率76% (292/381)
#1、cjです。追加レスです。 > ...シートへ値をコピペ... ということですから、 c.Offset(, 2).Resize(, 9).Copy Range("H3") の部分は Range("H3:P3").Value = c.Offset(, 2).Resize(, 9).Value のように書換えた方が良いのかもしれません。 修正、お願いします。 訂正が1件。 誤) > コピーしたシートすべてのB2セルに製造番号を入力します。 質問文では"B2"ですが、ご提示のコードでは"D2"になっています。 "B2"でお応えしています。 正) > コピーしたシートすべてのB2セルに製造番号を入力します。 質問文では"B2"ですが、ご提示のコードでは"B1"になっています。 "B2"でお応えしています。 失礼しました。
- cj_mover
- ベストアンサー率76% (292/381)
こんにちは。 コピー元とコピー先とで、シートの対応関係を追いかけるのなら、 「纏めて複数シートをコピーする」よりも 「1シートずつコピーする」方が 簡単ですし、十分に効果的です。 ということで、設計を変えてみます。 ' ' (1) 最初にシートをコピーする時は「新しいブックにコピー」 2回目からはアクティブなブックの「末尾へ...」「コピーを作成...」 ' ' (2) コピーしたすべてのシート(のB2)に製造番号を書き込む ' ' (3) 表紙シートの○に対応した行のD:L を 対応するシートのH3:P3 へ貼り付け という流れです。 今回は、.Text プロパティで正しく文字列値をシート名に指定していますから、 存在しないシート名を指定した場合のエラー処理は省きます。 「新しいブックにコピー」した時に、コピー先のブックがアクティブに、 それぞれのシートをコピーした時に、コピー後のシートがアクティブに、 なること、を、最大限利用します。 これができるのは、標準モジュールに書いた場合だけですので、 シートモジュールやThisWorkbookモジュールに書かない様に注意してください。 アクテイブなブックが切り替わってしまっても、 コピー元を見失わないように、 With ThisWorkbook ・ ・ End With With 節を使っています。 .Worksheets のように先頭にドット.の付いたものはすべて ThisWorkbook.Worksheets の意味です。 対して、 Worksheets(Worksheets.Count) は、「新しいブックにコピー」後のアクテイブなブック=新規に作成されたブック のWorksheetsを指します。 また、 Range("B2").Value = 製造番号 Range("H3") は、コピー後のシート=アクティブなシート のセル範囲のことです。 変数cでポイントしたセルは、 どんな時でも、ThisWorkbook.Worksheets("表紙").Range("B10:B13")の一部の単セルです。 ' ' 〓〓〓 標準モジュール 専用 〓〓〓 Sub Re8376285() Dim c As Range Dim 製造番号 As String Dim flg As Boolean flg = True ' ' 親オブジェクトを明示的に!! With ThisWorkbook 製造番号 = .Worksheets("表紙").Range("B6").Value For Each c In .Worksheets("表紙").Range("B10:B13") If c.Value Like "○*" Then ' ' (1) If flg Then ' 初めてなら、○に対応したシートを「新しいブックにコピー」 .Worksheets(c.Offset(, -1).Text).Copy flg = False Else ' それ以外なら、○に対応したシートをアクティブブックの最後にコピー追加 .Worksheets(c.Offset(, -1).Text).Copy After:=Worksheets(Worksheets.Count) End If ' ' (2) ' ' コピーしたすべてのシート(のB2)に製造番号を書き込む Range("B2").Value = 製造番号 ' ' (3) ' ' ○の行のD:L を 対応するシートのH3:P3 へ貼り付け If c.Offset(, 2) <> "" Then ' D列が空でなければ c.Offset(, 2).Resize(, 9).Copy Range("H3") End If End If Next c End With If flg Then MsgBox "部品番号が選択されていません。" Exit Sub End If End Sub ' ' 〓〓〓 〓〓〓 > コピーしたシートすべてのB2セルに製造番号を入力します。 質問文では"B2"ですが、ご提示のコードでは"D2"になっています。 "B2"でお応えしています。
関連するQ&A
- EXCEL VBA Array要素記述を変更したい
プログラムの中にセルの値を直接記入しているところがあます。 Select Caseの行の 「Array("101", "102", "103", "104")」のとろです。 プログラムには101, 102, 103, 104ではなくB10~B13を使用したいのですが、うまくできません。 実際には4つだけではなく何十個もあって作業がわずらわしくなるのと、ブックごとに値が異なって 汎用性がないためです。 アドバイスいただけると助かります。 初歩的なことを質問しているかも入れませんが、よろしくお願いいたします。 シート名「表紙」のA列は部品番号(=シート名)でA10:101 A11:102 A12:103 A13:104とします。 これに対応したシートが4つあり、シート名は、「101」「102」「103」「104」とします。 使用者は「表紙」のシートで下記の作業を行います。 B6セルには製造番号(例:AM01-130012)を入力します。 B10~B13セルは「○」「×」を入力規則から選択します ○を選択した隣のC10~C13セルは部品個数で1~9の数値を入力規則から選択します。 ○を選択したのと同じ行のD10~L10、D11~L11、D12~L12、D13~L13セルに、 文字列を入れる場合と入れない場合があります。文字列は左のD列から順に入れます。 下記マクロにて「○」となっているシートのみコピーを作成します。(1) コピーしたシートすべてのB1セルに製造番号を入力します。(2) D列に文字列があれば、コピーした対応するシートの中のH3~P3セルへ貼り付けます。(3) C列の値によって、コピーした対応するシートの中のH3~P3セルの値をクリアします。(4) <表紙のシート> A B C D E F G H I J K L 5 6 AM01-130012 7 8 9 10 101 × 9 11 102 ○ 3 12 103 ○ 8 A1-1 A1-2 A1-3 A1-4 A1-5 A1-6 A1-7 A1-8 13 104 × 9 <プログラム> Sub TestSample() Dim c As Range Dim 製造番号 As String Dim flg As Boolean flg = True With ThisWorkbook 製造番号 = .Worksheets("表紙").Range("B6").Value For Each c In .Worksheets("表紙").Range("B10:B13") If c.Value Like "○*" Then ' ' (1) If flg Then ' 初めてなら、○に対応したシートを「新しいブックにコピー」 .Worksheets(c.Offset(, -1).Text).Copy flg = False Else ' それ以外なら、○に対応したシートをアクティブブックの最後にコピー追加 .Worksheets(c.Offset(, -1).Text).Copy After:=Worksheets(Worksheets.Count) End If ' ' (2) ' ' コピーしたすべてのシート(のB2)に製造番号を書き込む Range("B1").Value = 製造番号 ' ' (3) ' ' ○の行のD:L を 対応するシートのH3:P3 へ貼り付け If c.Offset(, 2) <> "" Then ' D列が空でなければ Range("H3").Value = c.Offset(, 2).Value Range("I3").Value = c.Offset(, 3).Value Range("J3").Value = c.Offset(, 4).Value Range("K3").Value = c.Offset(, 5).Value Range("L3").Value = c.Offset(, 6).Value Range("M3").Value = c.Offset(, 7).Value Range("N3").Value = c.Offset(, 8).Value Range("O3").Value = c.Offset(, 9).Value Range("P3").Value = c.Offset(, 10).Value End If End If Next c End With ' ' (4) For Each 各シート In Worksheets With 各シート .Activate Select Case ThisWorkbook.Worksheets("表紙").Cells(Application.Match(各シート.Name, Array("101", "102", "103", "104"), 0) + 9, "C").Value Case "1" '1のときの仕事をする Range("I3:P3").Select Selection.ClearContents Case "2" '2のときの仕事をする Range("J3:P3").Select Selection.ClearContents Case "3" '3のときの仕事をする Range("K3:P3").Select Selection.ClearContents Range("J3").Select Case "4" '4のときの仕事をする Range("L3:P3").Select Selection.ClearContents Case "5" '5のときの仕事をする Range("M3:P3").Select Selection.ClearContents Case "6" '6のときの仕事をする Range("N3:P3").Select Selection.ClearContents Case "7" '7のときの仕事をする Range("O3:P3").Select Selection.ClearContents Case "8" '8のときの仕事をする Range("P3").Select Selection.ClearContents Case "9" 'do nothing Case Else End Select End With Next If flg Then MsgBox "部品番号が選択されていません。" Exit Sub End If
- 締切済み
- Excel(エクセル)
- EXCEL VBA コピーした複数シートを編集する
選択対象シート数は4つで、シート名は、「101」「102」「103追加工」「104」とします。 シート名「表紙」のセルはA1:101 A2:102 A3:103追加工 A4:104となっており、 使用者はB1~B4セルに「○」「×」を入力規則から選択します。 予めシート名「表紙」のB6セルには製造番号(例:AM01-130012)を入力しておきます。 「○」となっているシートのみ選択して、下記マクロにてコピーを作成します。 コピーしたシートすべてのB2セルに製造番号入力します。 作製したコピーを1つ上のフォルダに名前を付けて保存します。 ここまでは、できているのですが下記で行き詰っています。 さらに、○を付けた右よこのC1~C4セルに数値1~9を入力しておき、 ○を付けてコピーで作成した対応するシートの中を、 この数値によって編集するプログラムを追加したいのですが、うまくいきません。 アドバイスいただけると助かります。 VBA初心者で申し訳ございません。 どのような編集を行うのかが情報として必要でしたら下記になります。 101、102、103追加工、104それぞれのシートのD3セルに#1、E3セルに#2、・・・、L3セルに#9 (#1~#9)が予め入っています。 C1~C4セルは1~9の数値を入力規則で選択します。 たとえば、B1セルとB4セルを○に、C1セルを2、C4セルを8にして実行した場合、 コピーしたシート101のF3~L3セルをクリア(#1と#2を残して空白)に、 コピーしたシート101のL3セルをクリア(#1~#8を残して空白)にしたいのです。 もし、C1~C4セルで選択した値が9のときは編集する必要がありません。 Sub シートを選択してコピーを作成する() If Application.CountIf(Worksheets("表紙").Range("B1:B4"), "*○*") = 0 Then MsgBox "部品番号が選択されていません。" Exit Sub End If Dim 製番 As String 製番 = Range("B6").Value '(xlRangeValueDefault) sFileFullPath = ThisWorkbook.Path '------------------------------------------------- ' 1つ上の階層のフォルダのまでのフルパスを取得 '------------------------------------------------- For i = Len(sFileFullPath) To 0 Step -1 If InStr(i, sFileFullPath, "\") > 0 Then '現在のフォルダ名を取得 sFolderName = Mid(sFileFullPath, InStr(i, sFileFullPath, "\") + 1) '1つ上の階層のフォルダのまでのフルパスを取得 sParentFolderPath = Mid(sFileFullPath, 1, InStr(1, sFileFullPath, sFolderName) - 2) Exit For End If Next Dim ans As Integer If Dir(sParentFolderPath & "\" & (製番) & "_寸法検査成績書" & ".xls") <> "" Then ans = MsgBox(sParentFolderPath & "に [" & 製番 & "_寸法検査成績書" & ".xls" & "] が既に存在します。" & vbLf & "上書きしますか?", vbYesNo, "上書きの確認") If ans = vbYes Then Kill (sParentFolderPath & "\" & (製番) & "_寸法検査成績書" & ".xls") Else MsgBox "マクロを終了します。" Exit Sub End If End If '------------------------------------------------- ' 選択したシートのコピーを作成する '------------------------------------------------- Dim c As Range Dim flg As Boolean On Error Resume Next flg = True ThisWorkbook.Activate On Error GoTo ErrOut_ For Each c In Worksheets("表紙").Range("B1:B4") If c.Value Like "○*" Then Worksheets(c.Offset(, -1).Text).Select flg flg = False End If Next c If Not flg Then ActiveWindow.SelectedSheets.Copy '------------------------------------------------- ' コピーしたすべてのシートに製番を書き込む '------------------------------------------------- For Each 各シート In Worksheets 'ブック中の各シートに対して繰り返す With 各シート '各シートについて .Activate 'アクティブにする Cells(1, 2) = 製番 End With Next ActiveWorkbook.SaveAs sParentFolderPath & "\" & 製番 & "_寸法検査成績書" & ".xls", xlWorkbookNormal ActiveWorkbook.Close SaveChanges:=False ' 元のシートに戻る Worksheets("表紙").Select MsgBox sParentFolderPath & "に [" & 製番 & "_寸法検査成績書" & ".xls" & "] を作成しました。" Exit Sub ErrOut_: MsgBox """表紙""シートに記載されたシート名" & c.Offset(, -1).Text & "は存在しません。" & _ vbLf & "全角半角の相違を含め、シート名を確認してください。", vbInformation End Sub
- ベストアンサー
- Excel(エクセル)
- EXCEL VBA 複数シート選択の方法
エクセルVBAのシート選択方法について教えてください。 選択対象シート数は4つで、シート名は、「101」「102」「103追加工」「104」とします。 シート名「表紙」のセルは A1:101 A2:102 A3:103追加工 A4:104となっており、 使用者はB1~B4セルに「○」「×」を入力し、 「○」となっているシートのみ選択出来るようにしたい。 下記マクロの場合、シート名が全角文字だと使えるのですが、 シート名が「101」のように半角数字だけの場合コピーできません。 どこを修正すればよいのでしょうか? Sub TestSample2() Dim c As Range Dim flg As Boolean On Error Resume Next flg = True ThisWorkbook.Activate With Worksheets("表紙") For Each c In .Range("B1:B4") If c.Value Like "○*" Then Worksheets(c.Offset(, -1).Value).Select flg flg = False End If Next c End With With ActiveWindow.SelectedSheets If .Count > 0 Then .Copy End If End With '元のシートに戻る場合 'Application.Goto ThisWorkbook.Worksheets("表紙").Range("A1") End Sub
- ベストアンサー
- Excel(エクセル)
- エクセルで別シートの値を取得したいです。
エクセルで質問があります。 別シートからセル値を取得したいです。 ただ、セル番地は行番号、列番号で指定し、 行、列番号はセルに入力してある値を使いたいです。 例 Aシート(値格納シート) B1セル値=1000 -------------- Bシート(値取得シート) A列=行番号入力 B列=列番号入力 C列=Aシートの取得関数 A2セル値=1 B2セル値=2 C2セル=1000(取得値) C2セルの関数に、A2とB2の値を使って Aシートのセル値を取得したいです。 よろしくお願いします。
- ベストアンサー
- その他MS Office製品
- Excel VBA 他のシートからセル範囲をコピー
宜しくお願いします。 Excel2003でVBAを利用しています。 他のブック内にある(sheet1)のセル範囲(B9:D64)の値を 現在開いているブック内の(sheet8)の指定した位置に貼り付けたいと 思っています。 コピーしたセルはB,C,Dと3列あるのですが、 B列を(sheet8)のB列に、C列を(sheet8)のF列に、 D列を(sheet8)のJ列のそれぞれ12行目を頭にして 貼り付ける、という作業をしたいのです。 上記のようなコピー作業が、列や行がばらばらで50箇所くらい あります。 マクロ記録で、2,3箇所試しにやってみたのですが、 1列づつ、クリップボードを経由して行わなければならず、 冗長なコードになってしまい、もっと良い方法があるのでは ないかと思い、書込みしました。 現在のコードです。 workbook(1).Activate 'コピー元のセルを選択してクリップボードへ Worksheets(sheet1).Range("B9:B64").Copy '1枚目 日付列 '現在のブックを選択して貼り付け ThisWorkbook.Activate Range("B12").Select '1枚目 日付列 Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False '形式を選択して値を貼り付け 上記のように、1列づつコピーしては貼り付けている状態です。 もっとスマートな方法がありましたら教えてください。 宜しくお願いします。
- ベストアンサー
- Visual Basic
- VBAを使って検索したセルを別のシートにコピーする
こんにちは。 業務でエクセルを使用して差し込み文書を印刷しています。 量が多いのでVBAを使って簡単に作業したいです。 まず、以下のようなシートがあります。 <Sheet1>差込文書 <Sheet2> (A) (B) (C) (D) (E) (F) 番号|会社名|支店名|役職名|氏名|会社、支店名、役職名、氏名 次のような作業をさせたいです。 1.<sheet2>のA列と同じ番号が<sheet1>の(L1)にあるかどうか検索する。 2.もし、一致するセルがあれば、<sheet2>の該当番号の行のF列を<sheet1>の(B5)にすべて(書式ごと)コピーする。 以上です。 VLOOKUP関数でしましたが、すべてをコピーする事ができなかったので、VBAでコピーしたいです。 F列は、個人名だけの方、支店がない会社などがあるため、バランス良く配置しているセルです。 よろしくお願いします。
- ベストアンサー
- Visual Basic
- ExcelVBA シート間のコピー時に値の足し算
よろしくお願いします。 Excel2003 VBAで異なるシート間でセルのコピーをしています。 ある条件の時だけコピー先のセルに値を足し込みたいのですがうまくいきません。 以下、1部抜き出しで申し訳ありませんが問題のコードを記載します。 各配列にはコピー元シートのセル列数(C_Arr)とコピー先シートのセル行数(B_Arr)・列数(A_Arr)を指定してあります。 For y = 1 To UBound(B_Arr) For x = 1 To UBound(A_Arr) If A_Arr(x) = 22 Then Worksheets("A").Range(Cells(y + 2, C_Arr(x - 1)), Cells(y + 2, C_Arr(x - 1) + 1)).Copy Worksheets("B").Cells(B_Arr(y - 1), A_Arr(x - 1)).PasteSpecial Paste:=xlValues, Operation:=xlAdd Application.CutCopyMode = False Else Worksheets("A").Range(Cells(y + 2, C_Arr(x - 1)), Cells(y + 2, C_Arr(x - 1) + 1)).Copy _ Destination:=Worksheets("B").Cells(B_Arr(y - 1), A_Arr(x - 1)) End If Next x Next y コードを実行するとエラーにはならないのですが、値が足し込まれず最後のコピー値が上書きされる 結果となります。 うまくいく方法を教えて下さい。
- ベストアンサー
- Visual Basic
- エクセル 複数シートの値のみコピーで
こんにちは いつもお世話になっています。 先日、選択した複数のシートを新しいブックに値だけコピーするマクロをこちらで教えていただきました。(関数が入ったシートなのでタブの右クリックからの新規ブックへのコピーでは関数がコピーされてしまうので) 今回、このマクロで失敗するシートがあったので原因を教えてください。 値だけコピーするマクロは以下です。 Sub 値コピー() Dim WS As Worksheet ActiveWindow.SelectedSheets.Copy For Each WS In ActiveWorkbook.Worksheets With WS.Cells .Copy .PasteSpecial Paste:=xlPasteValues End With Next Application.CutCopyMode = False End Sub 失敗するシートにはつぎの関数があります。 A1セルに=REPLACE(CELL("filename",A1),1,FIND(".xlsx]",CELL("filename",A1))+LEN(".xlsx]")-1,) B3セルに=IF(COUNTIF(Sheet2!$1:$1,$A$1),IF(ROWS($3:3)>COUNTIF(OFFSET(Sheet1!$J:$J,,MATCH($A$1&"クラス",Sheet1!$J$1:$N$1,0)-1),B$2),"",COUNTIFS(OFFSET(Sheet1!$C:$C,,MATCH($A$1,Sheet1!$C$1:$G$1,0)-1),">"&INDEX(Sheet1!$C:$G,MATCH(B$2&"☆"&ROWS($3:3),OFFSET(Sheet2!$A:$A,,MATCH($A$1,Sheet2!$A$1:$E$1,0)-1),0),MATCH($A$1,Sheet1!$C$1:$G$1,0)),OFFSET(Sheet1!$J:$J,,MATCH($A$1&"クラス",Sheet1!$J$1:$N$1,0)-1),B$2)+1&"位 "&INDEX(Sheet1!$B:$B,MATCH(B$2&"☆"&ROWS($3:3),OFFSET(Sheet2!$A:$A,,MATCH($A$1,Sheet2!$A$1:$E$1,0)-1),0))&" "&INDEX(Sheet1!$C:$G,MATCH(B$2&"☆"&ROWS($3:3),OFFSET(Sheet2!$A:$A,,MATCH($A$1,Sheet2!$A$1:$E$1,0)-1),0),MATCH($A$1,Sheet1!$C$1:$G$1,0))&"点"),"") 別シートのデータから条件に合うものを引き出す関数です。 これらの関数もおしえていただいたもので、まだ理解できていませんので、説明不十分で申し訳ありません。 これらの関数があるシートではなぜ上記のマクロが失敗するのでしょうか。 もちろん、シートのデータを選択、コピーして新規ブックに値のみコピーはできます。 上記のような関数があるシートでも複数選択シートでの値のみコピーができるマクロを教えていただけないでしょうか。 情報不足がありましたら、教えてください。 よろしくお願いします。 エクセル2007
- ベストアンサー
- オフィス系ソフト
- VBA 特定の行を別シートへコピー・削除
下記のように、VBAで特定の行を抽出して別シートへコピーし、コピーした行については元リストデータを削除したいです。 具体的には、【出荷sheet】(C列注文番号は、出荷があった時に入力済)へ、注文番号に対応する行を【リストsheet】から抜き出してコピーし、コピー後は、【リストsheet】から該当行を削除したいです。 検索により調べてもうまく合致する回答が見当たらず困っています。 VBAの理解度は未熟ですが、何卒ご教授いただけると幸いです。 【リストsheet】 A列 B列 C列 D列 ・ ・ ・ J列 No. 日付 注文番号 品名 ・ ・ ・ ・ 1 1/1 A111 鉛筆 ・ ・ ・ ・ ←コピー後、削除 2 1/2 B222 ペン ・ ・ ・ ・ 3 1/5 C555 消しゴム・ ・ ・ ・ ←コピー後、削除 ・ ・ ⇓ 【出荷Sheet】 A列 B列 C列 D列 ・ ・ ・ J列 No. 日付 注文番号 品名 ・ ・ ・ ・ 1 1/1 A111 鉛筆 ・ ・ ・ ・ 3 1/5 C555 消しゴム・ ・ ・ ・
- ベストアンサー
- Excel(エクセル)
- エクセルの=IF(INDEX式の列方向へコピー
質問番号:6435996の続きです A列 B列 C列 D列 No. 名 前 住 所 金 額 1 佐藤 様 神奈川 5000 2 斎藤 様 東京都 1000 3 高橋 様 千 葉 2000 とエクセルで シート1に入力画面 シート2に印刷用の表を作成致しました。 質問番号:6435996で=IF(INDEX(シート1!B:B,6)="","",INDEX(シート1!B:B,6)) の形式の数式で シート1とシート2のリンクが完成致しました。 ここから100件分のデータを追加する場合 行方向へコピーすると=IF(INDEX(シート1!D:D,6)="","",INDEX(シート1D:D,6)) とセル番号のように数式が変わるのですが 列方向にコピーすると数式がそのままになってしまいます。 列方向へコピーをする場合 =IF(INDEX(シート1!B:B,6)="","",INDEX(シート1!B:B,6))を =IF(INDEX(シート1!B:B,7)="","",INDEX(シート1!B:B,7))のように コピーをセル番を変えて連続で行いたいのですが方法が分かりませんので 宜しくお願いします。
- ベストアンサー
- その他MS Office製品
お礼
回答ありがとうございます。 やりたいことができるようになりました。 シートをコピーする方法までアドバイスいただき勉強になりました。 質問文に誤記があり、たいへん申し訳ございませんでした。 コピー先のセルが統合されていたので、下記のようにいたしました。 ' ' ○の行のD:L を 対応するシートのH3:P3 へ貼り付け If c.Offset(, 2) <> "" Then ' D列が空でなければ c.Offset(, 2).Copy Range("H3") c.Offset(, 3).Copy Range("I3") c.Offset(, 4).Copy Range("J3") c.Offset(, 5).Copy Range("K3") c.Offset(, 6).Copy Range("L3") c.Offset(, 7).Copy Range("M3") c.Offset(, 8).Copy Range("N3") c.Offset(, 9).Copy Range("O3") c.Offset(, 10).Copy Range("P3")
補足
申し訳ございません。 また誤記がありました。 コピー先のセルが統合されていたので、下記のようにいたしました。 ' ' ○の行のD:L を 対応するシートのH3:P3 へ貼り付け If c.Offset(, 2) <> "" Then ' D列が空でなければ Range("H3").Value = c.Offset(, 2).Value Range("I3").Value = c.Offset(, 3).Value Range("J3").Value = c.Offset(, 4).Value Range("K3").Value = c.Offset(, 5).Value Range("L3").Value = c.Offset(, 6).Value Range("M3").Value = c.Offset(, 7).Value Range("N3").Value = c.Offset(, 8).Value Range("O3").Value = c.Offset(, 9).Value Range("P3").Value = c.Offset(, 10).Value