• ベストアンサー

「セルにある値」名のシートのデータコピー方法

hige_082の回答

  • hige_082
  • ベストアンサー率50% (379/747)
回答No.1

こんばんわ もっと整理して考えれば >例:「集計シート」のB3にA B4にB B5にC  > 「Aシート」の(G1:J5)を「集計シート」のB5を先頭に貼り付け 「集計シート」のB5はシート名、それとも貼付の先頭? もう少し基本を勉強された方が良いですよ シートの指定の仕方が、よく理解できていないではと思います 条件が良く分からないので 参考程度に Sub test() Dim 行 As Integer Dim コピーセル範囲 As String Dim 貼付先シート名 As String Dim シート名 As String コピーセル範囲 = "G1:J5" 貼付先シート名 = "集計シート" For 行 = 3 To 5 シート名 = Worksheets(貼付先シート名).Range("B" & 行).Value If Worksheets(貼付先シート名).Range("d7").Value = "" Then Worksheets(シート名).Range(コピーセル範囲).Copy Worksheets(貼付先シート名).Range("d7") Else Worksheets(シート名).Range(コピーセル範囲).Copy _ Worksheets(貼付先シート名).Range("d65536").End(xlUp).Offset(2) End If Next End Sub

uchin55
質問者

お礼

ありがとうございます。 参考にして(というか、一度ほぼそのまま利用させてもらいました) ですが、下記の部分でエラーが発生します。 「インデックスが有効範囲にありません」のエラーからデバッグに入ると、 Worksheets(シート名).Range(コピーセル範囲).Copy Worksheets(貼付先シート名).Range("d7") が選択されています。 これはどこが悪いのやら・・・

関連するQ&A

  • エクセル 特定のシートを異なるブックの指定したシートにコピーするマクロ

    エクセルの"貼り付け先.xls"の(シート名="集計")を開いている状態で、 別の異なるブックの"貼り付け元.xls"の(シート名="sheet1")の内容を全部コピーして "貼り付け先.xls"の(シート名="集計元データ")へ貼り付けるマクロは どのようになりますでしょうか? いろいろ調べて下記のように書きましたが、 インデックスが有効範囲にありませんというメッセージが出て、 デバッグを確認すると Workbooks("貼り付け元.xls").Worksheets("Sheet1").Range("A1").Copy_の部分が黄色く表示されてきます。 (1) "貼り付け先.xls"と"貼り付け元.xls"は同じパソコンのマイドキュメントに保存されています。 (2)"貼り付け元.xls"の"Sheet1"はセルA1から入力されていて、 内容は毎日変わります。 (3)Range("A1")や("A1:IV65536")のセル番地をいろいろ変えたりしても同じでした。 Sub クリップボードを経由せずにコピー貼り付けする_異なるブック() Workbooks("貼り付け元.xls").Worksheets("Sheet1").Range("A1").Copy_ Workbooks("貼り付け先.xls").Worksheets("集計元データ.xls").Range ("A1:IV65536") End Sub

  • sheetの末尾にコピーする方法

    エクセルVBAで売上帳を作っています。 ひとつのbookで、売上帳sheetと入力用sheetを作っています。 入力用sheetから売上帳sheetへコピーする際に、売上帳sheetが3行目で終わっていたら、次は4行目から、というふうにしたいのですが、できません。 下のコードで実行すると、売上帳sheetの表の最終行からの貼付けになってしまいます。 Sub 売上() 行番号 = Range("最終行").Row - 2 '入力用sheetの最終行の2行上の行番号取得し「行番号」に代入 セル = "F" & 行番号 Range("B8:" & セル).Select Selection.Copy '入力用sheetの対象部分をコピー Worksheets("売上帳").Activate '売上帳シートをアクティブにする 行 = Range("G4").CurrentRegion.Rows.Count + 1 'アクティブセル領域の行数 + 1 Range("G" & 行).Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False '値の貼り付け End Sub どなたか教えてください。 宜しくお願いします。

  • シート間の値の貼り付け。 スマートにしたい。

    こんばんは。 エクセルのシート1の[d7]から シート2の[最終行]からカウントした数分(下の場合はシート1[d7]の値をc列に3行分)貼り付けるには下記のコードでOKと伺ったのですが、 この作業を何度も繰り返しさせているうちに動作が重くなってしまったような気がするのでが、シート1の[b2](貼り付け時に日付)[b3](VLOOKUPの計算式が入っているので値のみ)[b4](時刻)の形式でシート2のそれぞれ、隣接するd,e,l列に3行づつ貼り付けたいのですが、 何か方法は、ありますでしょうか。(それぞれ貼り付けたい形式も異なります。) n=3 Worksheets("Sheet1").Range("d7").Copy _ Destination:=Worksheets("Sheet2").Range("c65536").End(xlUp).Offset(1, 0).Resize(n, 1) ↓動作確認ができなくなってしまったので、試していないのですが、 上の式の値のみ貼り付け方法は下記でよいのでしょうか。 '値のみ貼り付け Set WWR1 = Worksheets("Sheet1").Range("c7") Set WWR2 = Worksheets("月度集計").Range("c65536").End(xlUp).Offset(1, 0).Resize(n, 1) WWR2.Value = WWR1.Value 宜しくお願い致します。

  • マクロでコピーしたセルと同じ数だけコピーしたい

    最近マクロの作成を始めた初心者です。 以前もこちらで質問しながら、下のようなマクロを作成したのですが、 少し追加で設定をしたいと思います。 どうやったら以下の設定ができるのでしょうか。 作成済み 「集計」のシートに「123」「402」「4002」などのシートの同じ番地(C10:F12)のセルの内容をコピーしたい その際、「集計」B3:B15に入力されているシート名のみ対象にしたい 最初は、「集計」F6を頭にして貼り付けたい コピーは、前のコピー分の下に連なる形でコピーしたい 追加したい事 例:E列に「123」のシートのB2の内容、D列に「123」のシートのB3の内容を上の構文で追加したすべての行にコピーしたい その下にも同じ条件で追加したい 例:●は様々な値です   「AB」や「あい」のように、コピーしたい  A B ● ● ● ●  A B ● ● ● ●  A B ● ● ● ●  あ い ● ● ● ●  あ い ● ● ● ●  あ い ● ● ● ●  現在、作成済みの分 Sub test() Dim sn As String d = 6 For i = 3 To 15 If Worksheets("集計").Range("B" & i) <> "" Then sn = Worksheets("集計").Range("B" & i) Worksheets(sn).Range("C10:F12").Copy Worksheets("集計").Range("F" & d + 1).PasteSpecial Paste:=xlValues, Transpose:=True d = Worksheets("集計").Range("F65536").End(xlUp).Row End If Next i End Sub

  • Excelマクロについて(セルのコピー)

    今、マクロで自動的にセルのデータを別シートに貼り付けるというものを作っています。 Private Sub コピー定義() Worksheets("sheet1").Activate 'sheet1をアクティブにする コピー元行 = 2 コピー先行 = 1 コピー元セル = "A" & コピー元行 コピー先セル = "A" & コピー先行 Worksheets("sheet1").Range(コピー元セル).Copy _ Destination:=Worksheets("sheet2").Range(コピー先セル) End Sub これで、sheet1のA2からsheet2のA1にコピーできるのですが、 Private Sub コピー定義() Worksheets("sheet1").Activate 'sheet1をアクティブにする コピー元行 = 2 コピー先行 = 1 コピー元行 = 2 コピー先行 = 1 コピー元セル = "A" & コピー元行 コピー先セル = "A" & コピー先行 コピー元セル = "B" & コピー元行 コピー先セル = "B" & コピー先行 Worksheets("sheet1").Range(コピー元セル).Copy _ Destination:=Worksheets("sheet2").Range(コピー先セル) End Sub とすると、B2の項目しかコピーされません。複数のセルを一度にコピーするマクロの作り方をご存じの方、ご伝授下さい。

  • 【VBA】Ifで他シートから検索しコピーする

    Excel vbaについて教えてください。 自分で作成したコードが、うまく動かず悩んでいます。 ●作りたいもの Sheet3のA列にある数字を検索値とし、 Sheet1のA列を検索し、合致する行のB列~最終列までコピーし、 Sheet3のB列から貼付する。 ※Sheet1にある列数(項目数)は不定です ●作成したマクロ Sub test() Dim sh1 As WorkSheet Dim sh2 As WorkSheet Set sh1 = Worksheets("Sheet1") Set sh2 = Worksheets("Sheet3") d = sh2.Range("A1").End(xlDown).Row 'Sheet3検索値のA列のデータの最終行 g = sh1.Range("B1").End(xlToRight).Column 'Sheet1の最終列 k = 2 For i = 2 To d    'Sheet3最終行まで If sh1.Cells( i & "A") = sh2.Cells( 1,"A") Then '条件)Sheet1とSheet3のA列が合致 For j = 2 To g                      'Sheet1の最終列まで sh2.Cells( k , j ) = sh1.Cells( i , j ) 'Sheet1のB行から最終列をコピーしSheet3へ貼付 Next j End If Next End Sub いろいろ直していたのですが、Set sh2 = Worksheets("Sheet3")で「インデックスが有効範囲にありません」(同じブック内に同名シートがあるのに?)とエラーが出たり、 また、B行から最終列までコピーする際の範囲指定についてもよくわからず、 もっと他に良い方法が無いものかとお手上げ状態です。 どうぞ宜しくお願いいたします。

  • Excel VBA セルの値をシート名にしたいのです。

    こんばんは 新しくシートを挿入させて、「シート2」の値のみをコピーさせたいと考えています。 その新しく挿入させたシート名を「シート1」のせるA3とA4の文字列をあわせたものにしたいのですが、どうしたらよいのでしょうか。 途中まで考えたところでいきずまってしまいました。 どうか英知をお貸しください。 宜しくお願い致します。 A3には日付、A4には名前が入力されています。 Dim sheetName As String Worksheets("月度集計").Activate Sheets.Add After:=Sheets(Sheets.Count) ActiveSheet.Name = Worksheets("Sheet1").Cells(3, 3).Value On Error Resume Next Worksheets(1).Name = sheetName On Error GoTo 0 Range("f2").Select

  • セルの値をシート名にするエクセルVBA

    件名のVBAを以下のように書きました B列の4からずっと下までのセルの値を次々とシート「ひな型」をコピーし増やしていくものです。 Sub テスト() ' ' Macro ' ' Dim target As Range Dim h As Range '見えてるセルを取得する。「全部隠れていた」場合も考える。 On Error Resume Next Set target = Worksheets("Sheet1").Range("B4:B" & Worksheets("Sheet1").Range("B65536").End(xlUp).Row).SpecialCells(xlCellTypeVisible) If target Is Nothing Then Exit Sub 'シートを増やしていく For Each h In target On Error GoTo errhandle Worksheets(CStr(h.Value)).Select On Error GoTo 0 Next Sheets("Sheet1").Select Exit Sub errhandle: Worksheets("ひな型").Copy after:=Worksheets(Worksheets.Count) ActiveSheet.Name = h.Value Resume End Sub これだと、一応思った通りにはなるのですが B列のセルに複数同じ名前があった時に、既に作ったシートの名前がある場合 それは無視するという風に実行したいです お知恵をお貸しくださいませ

  • 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

  • 《エクセル2000》シート名をセルで指定する?

    「学校」「会社」「家庭」などをシート名に持つファイルがあります。 それぞれに入っている数字を「集計」シートに集計したいのですが、例えば集計シートのA1セルに「学校」などのシート名を表示させて、その「集計シートA1セルの値に該当する名前のシートのB1~B100を合計する」というのを、関数で表現するにはどうすればいいでしょうか?(VBAではなく) よろしくお願い致します。