Excel リンク貼り付けのエラー

このQ&Aのポイント
  • Windows10、Microsoft365を使用している超初心者がExcelでリンク貼り付けができないエラーに遭遇しました。詳細なコードや手順を記述し、エラーの原因を特定できる情報を求めています。
  • 表2にリンクを貼り付ける際、予想とは異なるセル範囲にリンクが貼り付けられてしまうというエラーが発生しています。具体的には、E40:AI73ではなくE6:AI39にリンクが貼り付けられてしまいます。エラーの原因や解決策をご教示いただけますと幸いです。
  • ExcelのVBAを使用して、シート集計の表1と表2にリンクを貼り付けるプログラムを作成しています。しかし、表2にリンクを貼り付ける際に予想外の箇所にリンクが貼り付けられてしまうエラーが発生しています。エラーの原因と解決方法についてアドバイスをいただきたいです。
回答を見る
  • ベストアンサー

excel正しくリンク貼り付けができません

Windows10,microsoft365使用の超初心者です。 シート集計を表1、ひょう2にリンク貼り付けするため 次のコードを実行したところ、表2を見ると E40:AI73でなく、E6:AI39がリンク貼り付けされています。 原因がわかりません。困ってます。よろしくお願いいたします。 Sub 表1にリンク貼り付け() Dim my_cell Dim i Worksheets("集計").Activate Range("E6:AI39").Select i = 1 For Each my_cell In Selection Worksheets("表1").Cells(i, 1).Value = "=集計!" & my_cell.Address i = i + 1 Next my_cell End Sub Sub 表2にリンク貼り付け() Dim my_cell Dim i Worksheets("集計").Activate Range("E40:AI73").Select i = 1 For Each my_cell In Selection Worksheets("表2").Cells(i, 1).Value = "=集計!" & my_cell.Address i = i + 1 Next my_cell End Sub

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

  • ベストアンサー
  • masnoske
  • ベストアンサー率35% (67/190)
回答No.6

下記のコードを B.xlsmの標準モジュールに記述してください. ' --- ここから ----------------- Option Explicit Public Sub 表1にリンク貼り付け() Dim wb As Workbook Dim sh As Worksheet Dim rng As Range Set wb = GetBook("C.xlsx") Set sh = wb.Worksheets("表1") Set rng = sh.Range("E6:AI39") Call リンクを作成(sh, rng) End Sub Public Sub 表2にリンク貼り付け() Dim wb As Workbook Dim sh As Worksheet Dim rng As Range Set wb = GetBook("C.xlsx") Set sh = wb.Worksheets("表2") Set rng = sh.Range("E40:AI73") Call リンクを作成(sh, rng) End Sub Private Function GetBook(ByVal bkName As String) As Workbook Dim path As String ' C.xlsxのパスを取得(このブックと同じフォルダにある前提) path = ThisWorkbook.path & "\" & bkName ' C.xlsxが開いていなければ開く On Error Resume Next Set GetBook = Workbooks(bkName) On Error GoTo 0 If GetBook Is Nothing Then Set GetBook = Workbooks.Open(path) End If End Function Private Sub リンクを作成(ByVal sh As Worksheet, ByVal rng As Range) Dim my_cell As Range Dim i As Long i = 1 For Each my_cell In rng sh.Cells(i, 1).Value = "=集計!" & my_cell.Address i = i + 1 Next my_cell End Sub ' --- ここまで ----------------- まずモジュール [表1にリンク貼り付け()]と [表1にリンク貼り付け()]で同じ動作をする部分をモジュール [リンクを作成()]にまとめました. 次に [表1にリンク貼り付け()]と [表1にリンク貼り付け()]のどちらを先に実行するかの規定がないのと,実行前に必ず C.xlsxが開いている保証がないので,C.xlsxが開いていなければ開くモジュール [GetBook()]を双方のモジュールに 追加しました.

aitaine
質問者

お礼

いま試しました。完璧に思う通りのことができ感謝しています。ありがとうございました。

その他の回答 (5)

  • masnoske
  • ベストアンサー率35% (67/190)
回答No.5

別ブックのシートを操作するのなら、このマクロでは無理です。 それとマクロをどこに記述されているのかという先の質問は、 ブックモジュールかシートモジュールか標準モジュールかという意味です。 マクロを記述する場所によってスコープが変わります。 別ブックのシートを操作するのなら、標準モジュールに記述するのが良いでしょう。

  • masnoske
  • ベストアンサー率35% (67/190)
回答No.4

マクロはどこに記述されていますか?

aitaine
質問者

補足

デスクトップにAフォルダが表示されています。そのフォルダをクリックするとB.xlsmsとC.xlsxのデータファイルが入っています。マクロは、そのB.xlsmに記述されています。ここのマクロによってC.xlsxのデータファイルを操作したいです。

  • kkkkkm
  • ベストアンサー率65% (1608/2445)
回答No.3

通常どちらでも正しく出るのですが、原因不明ですね。 一度新しいブックで試してみてはいかがでしょう。 一応確認ですが Worksheets("表2").Cells(i, 1).Value = "=集計!" & my_cell.Address を Worksheets("表2").Cells(i, 1).Value = my_cell.Address にして、どのアドレスがセルに代入されるか確認してみてください。 また、 式を入れる場合は.Formulaの方がいいと思います。 Worksheets("表2").Cells(i, 1).Formula = "=集計!" & my_cell.Address

  • kkkkkm
  • ベストアンサー率65% (1608/2445)
回答No.2

For Each my_cell In Selection をそれぞれ For Each my_cell In Range("E6:AI39") For Each my_cell In Range("E40:AI73") に変更してください。

aitaine
質問者

補足

すいません。まちがえてました。ご教示いただいたとおり実行しましたが、依然と表2には正しくリンク貼り付けが出来ません(´;ω;`)ウゥゥ

  • kkkkkm
  • ベストアンサー率65% (1608/2445)
回答No.1

For Each my_cell In Range("E6:AI39") For Each my_cell In Range("E40:AI73") にして試してみてはいかがでしょう。

aitaine
質問者

補足

Sub 表1にリンク貼り付け() Dim my_cell Dim i Worksheets("集計").Activate 'Range("E6:AI39").Select For Each my_cell In Range("E6:AI39") i = 1 For Each my_cell In Selection Worksheets("表1").Cells(i, 1).Value = "=集計!" & my_cell.Address i = i + 1 Next my_cell End Sub Sub 表2にリンク貼り付け() Dim my_cell Dim i Worksheets("集計").Activate 'Range("E40:AI73").Select For Each my_cell In Range("E40:AI73") i = 1 For Each my_cell2 In Selection Worksheets("表2").Cells(i, 1).Value = "=集計!" & my_cell.Address i = i + 1 Next my_cell End Sub 変更しましたら、コンパイルえらー Forで指令された変数は既に使用されていますとなります。

関連するQ&A

  • 【Excel VBA】データ貼り付けの開始位置について

    Excel2003を使用しています。 先日、こちらでアドバイスをいただきながら、下記のようなマクロを作りました。内容はあるセルの値と同じ名前のシートへデータをコピーするというものです。 Sheet1に貼り付け元のデータが表形式であり、必要なデータのみ該当のシートへコピーします。マクロ実行後は、別の新しいデータをSheet1へコピペして、またマクロを実行するのですが、その際、データの貼り付け開始位置を前回マクロを実行して貼り付けられたデータから2行空けたいのですが、可能でしょうか? ________________________________________________________________________________________________________________________________ Sub test3() Dim n As Long Dim i As Long Dim j As Long  Worksheets("Sheet1").Activate   For n = 4 To Cells(Rows.Count, 2).End(xlUp).Row    If Cells(n, 3).Value <> "" Then     With Worksheets(CStr(Cells(n, 3).Value))       i = .Cells(Rows.Count, 3).End(xlUp).Row + 1       Cells(n, 2).Copy .Cells(i, 2)       Cells(n, 7).Resize(, 2).Copy .Cells(i, 4)       Cells(n, 11).Copy .Cells(i, 3)     End With    End If    If Cells(n, 13).Value <> "" Then     With Worksheets(CStr(Cells(n, 13).Value))       j = .Cells(Rows.Count, 3).End(xlUp).Row + 1       Cells(n, 12).Copy .Cells(j, 2)       Cells(n, 17).Copy .Cells(j, 4)       Cells(n, 18).Copy .Cells(j, 6)       Cells(n, 11).Copy .Cells(j, 3)     End With    End If   Next n End Sub

  • VBAの貼り付け機能で質問させていただきます。

    VBAの貼り付け機能で質問させていただきます。 あるブックのシート全体の内容をコピーして、 別のブックに貼り付ける処理を作成していますが、 コピー元のシートにある画像だけが貼り付けされずに困っています。 ホームページで探してやってみましたが、どれもうまくいきませんでした。 ご存じの方がいましたら、助言をお願いします。 下の記述で画像以外は貼り付けできています。 Sub 貼り付け() Worksheets("コピー元シート").Select Cells.Select Selection.Copy Workbooks.Open Filename:="C:¥コピー先.xls" Workbooks("コピー先.xls").Activate Worksheets("コピー先シート").Select Cells.Select Selection.PasteSpecial Paste:=xlPasteAll, _ Operation:=xlNone, SkipBlanks:= False, _ Transpose:=False End Sub

  • Excel VBAで検索(Win2000 Excel2000)

    現在、下記のようなコードを書いています。データテーブルの縦と横の検索値を探してその列数と行数を返したいのですが、下記の Sub検索1 と Sub検索2 を1つのSubで実行させるにはどうしたらよいのでしょうか?よろしくお願い致します。 ----------------------------------------- Sub 検索1() Worksheets("Data").Activate Dim x As Integer For x = 3 To 22 If Cells(2, x).Value >= 12 Then MsgBox x Exit Sub End If Next MsgBox "見つかりません" End Sub --------------------------------------------- Sub 検索2() Worksheets("Data").Activate Dim i As Integer For i = 4 To 42 If Cells(i, 2).Value = "A" Then MsgBox i Exit Sub End If Next MsgBox "見つかりません" End Sub

  • Excelのマクロでリンクを張る方法

    全てのワークシートから文字を検索して書き出すマクロを作ってます。 書き出したセルに元のシートへのリンクを張りたいのですが、書式がよくわかりません。どのように書けばよいですか? 以下のようなコードで★の場所です。 word = Application.InputBox("検索文字を指定", "検索", Type:=2) Set ws1 = ActiveSheet rw1 = 9 '次のシートから最後のシートまでサーチ For n = ActiveSheet.Index + 1 To Worksheets.Count Set ws2 = Worksheets(n) With ws2.Cells Set cell = .Find(word, LookIn:=xlValues) If Not cell Is Nothing Then fAddr = cell.Address Do '見つかった場合、その行をコピー ws_name = ws2.Name rw2 = cell.Row ws2.Activate Range(Cells(rw2, 1), Cells(rw2, 10)).Copy '先頭のワークシートに貼り付け ws1.Select rw1 = rw1 + 1 Cells(rw1, 1).Value = ws_name Cells(rw1, 2).Value = rw2 ★セル(rw1,2)にws2のr2行A列へのリンクを加えたい Cells(rw1, 3).Select ActiveSheet.Paste '次をサーチ ws2.Activate: cell.Activate Set cell = .FindNext(cell) Loop While Not cell Is Nothing And cell.Address <> fAddr End If End With Next n

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

    お手数ですが誰か教えてください! BのデーターをAに集計するマクロを作ったのですが 処理速度とっても遅いのです。 高速で処理する方法はありませんでしょうか? 私が作ったマクロ Sub 集計() Dim Z As Integer Dim i As Integer Dim X As Integer For Z = 2 To 2000 For i = 2 To 2000 For X = 3 To 20 If Worksheets("A").cells(Z, 1) = Worksheets("B").cells(i, 1) And       Worksheets("A").cells(1, X) = Worksheets("B").cells(i, 14) Then Worksheets("A").cells(Z, X) = Worksheets("B").cells(i, 16) End If Next X Next i Next Z End Sub       どこかが間違っている気がしますがマクロ初心者のため       先に進めません。       どうかご教授よろしくお願い致します。

  • マクロ Value=Valueで複写できない

    いつも回答して頂きありがとうございます。 たぶん基本的な質問だと思うのですが、どうしたら上手くいくのか分かりません。御指導の程よろしくお願いします。以下の記述でエラーがかかります。 『コンパイルエラー:SubまたはFunctionが定義されていません』 Worksheets("一覧").Cells(d, 5).Value = Wokrsheets("編集用一覧").Cells(e, 5).Value 記述全体 Sub TEST() Dim d As Integer Dim e As Integer Worksheets("一覧").Activate d = 3 e = 6 Do While Worksheets("一覧").Cells(d, 2).Value <> "" Worksheets("一覧").Cells(d, 5).Value = Wokrsheets("編集用一覧").Cells(e, 5).Value d = d + 1 e = e + 4 Loop End Sub

  • エクセル マクロ 写真貼り付け

    エクセル マクロ 写真貼り付け よろしくお願いします。 以前ここで、エクセルに写真を張り付けるマクロのコードが乗っていたので、それを使わせていただいていたのですが、PCを入れ替えてからうまく動作してくれません。どなたか修正個所を教えていただけると助かります。 OS ビスタ  エクセル 2007 "data"シートに貼付する写真のあるフォルダのパス、写真ファイル名が張り付ける分だけ表記されていて、"picture"シートに"data"シートの指定した写真を張り付けていきます。 A4用紙に以前はB3セル辺りから写真を指定の大きさに張り付け、次のページに移動してB37セルB71セルB105セルと写真貼り付けをしてくれましたが、PC入れ替え後から写真が1ページ目のB3セルに重ねて張り付けられてしまいます。 以前のように各ページに1枚ずつ写真を指定の大きさに張り付けるにはどうしたらよいのでしょうか。 以前はOS XP  エクセル2003でした。 マクロに関しては素人です。どうかよろしくお願いします。 Sub MakeThumbnail() Cells.Select Selection.RowHeight = 22.5 Dim myDataCnt As Long Dim myNo As Long Dim i As Long Dim myRow As Long Dim myName As String myDataCnt = Worksheets("data").Range("A1").End(xlDown).Row myNo = 1 myRow = 2 Worksheets("picture").Select Do Until myNo > myDataCnt myName = Worksheets("data").Cells(myNo, 1).Value Cells(myRow, 2).Select ActiveSheet.Pictures.Insert(myName).Select Selection.ShapeRange.LockAspectRatio = msoTrue Selection.ShapeRange.Width = 200# myRow = myRow + 12 myNo = myNo + 1 Loop End Sub

  • エクセルVBAによるファイル実行及び貼り付け

    フォルダ内にあるファイル(専用ソフトから出力されたファイル、中身はテキスト系、拡張子なしのファイル、エクセルでも読み込み可)を実行して指定したシートに貼り付けをしたいのですがファイルがないといわれてしまいます。 ちなみにまだまだプログラム初心者なものでおかしなことを聞いているかもしれませんが宜しくお願いします。 Sub 上リンク() Dim myCell(1) As String Dim i As Integer, j As Integer Dim データ As Variant データ = Worksheets("入力").Range("H64") 'ワークシート[上型NC]をアクティブにする Worksheets("上型NC").Activate '[C:\*****\***\***]フォルダの「データ」をシーケンシャ入力ルモードで開き、 'ファイル番号を「1」に指定する Open "C:\****\***\***\データ" For Input As #1 'ここでファイルがないというエラーが発生!データはフォルダ内にある任意データ Do Until EOF(1) 'ファイルのデータを変数に格納する Input #1, myCell(1) i = i + 1 For j = 1 To 1 Cells(i, j).Value = myCell(j) Next j Loop 'ファイルを閉じる Close #1 Worksheets("入力").Activate End Sub になりまして”データ”の部分に任意の決まっていないデータがをいれたいのですがデータがないといわれてしまいます。ここではエクセルのシートにデータ名を入力して実行、上型NCシートに貼り付けといった手順をとりたかったのですが。 わかりづらいかもしれませんが宜しくお願いします。 ちなみにデータの部分を実際のファイル名にすれば貼り付けはできますが、そこを任意にするとファイルがないといわれてしまいます。

  • コピペマクロを高速化したい(Excel)

    見よう見まねで以下のようなコードを書いてみたのですが、 これだと表示にやや時間がかかるので改善したいです。 ------ Sub コピペ() Dim i As Long i = Range("A1") Range("C12").Value = Worksheets("sheet2").Cells(i, 2).Value Range("D12").Value = Worksheets("sheet2").Cells(i, 3).Value Range("E12").Value = Worksheets("sheet2").Cells(i, 4).Value Range("F12").Value = Worksheets("sheet2").Cells(i, 5).Value Range("G12").Value = Worksheets("sheet2").Cells(i, 7).Value ------ こんな感じでコピペしたい値があと15個くらいあります。 コピー元とコピー先のセル配置には法則性があまりありません。 よろしくお願いします。

  • VBA 別シートからコピー貼付け(複数列)

    別シートからコピー貼付け(複数列)をしたいのですが,同一シートからのコピー貼付けはネットから以下のマクロでできました。 しかし,別シートsheet1からsheet2ヘコピーで修正しましたが,「アプリケーション定義またはオブジェクト定義のエラーです。」となります。どなたかご教授よろしくお願いします。 修正したマクロ Sub sampel() Dim i As Long For i = 2 To Range("E65536").End(xlUp).Row Step 2 Sheets("sheet2").Range(Cells(i + 1, 2), Cells(i + 1, 85)).Value = _ Sheets("sheet1").Range(Cells(i, 5), Cells(i, 88)).Value Next i End Sub 参考としたマクロ http://www.excel.studio-kazu.jp/kw/20041208152106.html Sub sampel() Dim i As Long For i = 2 To Range("E65536").End(xlUp).Row Step 2 Range(Cells(i + 1, 2), Cells(i + 1, 85)).Value = _ Range(Cells(i, 5), Cells(i, 88)).Value Next i End Sub

専門家に質問してみよう