こんにちは、エクセル365を使っています。
以前に以下のようなコードを教えて頂いたのですが、これは記述したシートの値の上下を反転させるものです。
これを別ブックに書いて(例えばブックA)、ブックBのシート1を動作させるにはどうしたら良いでしょうか?
目的のファイルが大量にあるために、ブックBのほうに全てこのコードを記述するよりもブックAからまとめてコントロールしたいと思います。
詳しい方、よろしくお願いいたします。
***************** 以下 コード *****************
Sub Macro上下反転()
Dim 最終行 As Long
Dim temp As Variant 'セルの内容によってはstring 等でも可能
Dim 上行 As Long
Dim 下行 As Long
Dim 列変数 As Long
最終行 = ActiveSheet.UsedRange.Rows.Count
'最終行の取得の仕方は複数あります。最適なものを使用してください。
For 上行 = 1 To Int(最終行 / 2)
下行 = 最終行 - 上行 + 1
For 列変数 = 2 To 8 '対象列をBからHまで順次
temp = Cells(上行, 列変数).Value '上側セルの値を取得=一端保存
Cells(上行, 列変数).Value = Cells(下行, 列変数).Value
Cells(下行, 列変数).Value = temp
Next 列変数
Next 上行
End Sub
No.1
- 回答日時:
こんにちは
>これを別ブックに書いて、ブックBのシート1を動作させるにはどうしたら良いでしょうか?
操作対象となるセル位置をブック、シートを含めて明示した記述にすれば良いです。
(省略すると、デフォルトとして、VBAのあるブックのアクティブシートなどが参照されるようになります)
具体的には、個々の対象(セル範囲など)を示す際に 「MyBook.MyWorksheet.Range」といった形式で明示すれば良いです。(MyBook、MyWorksheet等は特定のシートなどを示すオブジェクトの変数)
一連の処理にいちいちこのような記述をするのが面倒だというような場合は、Withステートメントを用いて省略記述することも可能です。
With MyBook.MyWorksheet
.Cells(i, j).Value = "hoge"
.Range("A1:C3").Copy
~~~
~~~
End With
といった具合です。
上記のうち、「.Cells」は「MyBook.MyWorksheet.Cell」の意味として、「.Range」は「MyBook.MyWorksheet.Rane」として解釈されます。
※ Withに関して、詳しくは以下をご参照ください。
https://docs.microsoft.com/ja-jp/office/vba/lang …
お返事が遅くなりすみません。
そして、回答ありがとうございます。
なるほどです、まとめてWithステートメントで処理するって言う意味なんですね?
今回は実際にコードがあるので、直に指定するほうが良かったのですが、勉強になりました。
ありがとうございます。
No.2ベストアンサー
- 回答日時:
Sub Macro上下反転()
Dim 最終行 As Long
Dim temp As Variant 'セルの内容によってはstring 等でも可能
Dim 上行 As Long
Dim 下行 As Long
Dim 列変数 As Long
With workbooks("ブックB").sheets("シート1")
最終行 = .UsedRange.Rows.Count
'最終行の取得の仕方は複数あります。最適なものを使用してください。
For 上行 = 1 To Int(最終行 / 2)
下行 = 最終行 - 上行 + 1
For 列変数 = 2 To 8 '対象列をBからHまで順次
temp = .Cells(上行, 列変数).Value '上側セルの値を取得=一端保存
.Cells(上行, 列変数).Value = .Cells(下行, 列変数).Value
.Cells(下行, 列変数).Value = temp
Next 列変数
Next 上行
End With
End Sub
では
返事が遅れましてすみません。
そして、ありがとうございます。
当方のコードをそのまま利用して最短かつ的確な回答を頂き、ありがとうございました。
実際に利用させて頂きます。
回答ありがとうございました。
No.3
- 回答日時:
上記コードがメイン処理として、
Cells(上行, 列変数).Valueなどは、ブック、シートを明示する必要がありますね
他のブックを操作するには、対象のブックを開きます。開いたら閉じることも合わせ考えます。
>目的のファイルが大量にあるために
なのなら、フォルダに纏めて一気にと思いますが、取敢えず、1つのブックに対してのサンプルです。
Sub Sample()
Dim OpenFileName As String, TrgName As String
Dim Sht As Worksheet
'開いたブックに対象のシート名シートがあるか確認
TrgName = "シート1" '対象のシート名
'ダイアログでファイルをユーザーが選択
OpenFileName = Application.GetOpenFilename("Microsoft Excelブック,*.xls?")
If OpenFileName <> "False" Then
'ブックを開く(With そのブック内で処理)
With Workbooks.Open(OpenFileName)
For Each Sht In Worksheets 'すべてのシートの名前を確認あれば
If Sht.Name = TrgName Then '対象のシートがあればメイン処理
' Sht.Activate
' With Sht
'メイン処理
Exit For
End If
Next
'保存して閉じる
.Saved = True
.Close
MsgBox ("完了")
End With
End If
End Sub
重い処理でないので、、こんな感じでも出来るかな
未検証なので、コードに付いては、不備がある可能性があります。
内容については、確認を必ず行って、理解の上自己責任でお願いします。
No.4
- 回答日時:
わっ、、、なんとなく見に来て自分の回答にびっくり
大変申し訳ないです。
.Saved = True
.Close
は、保存した事にして閉じるです。
.Saved = True
.Close
を削除して
.Close SaveChanges:=True
または、
.Save
.Close
などとしてください。
回答頂きありがとうございます。
また、見に来て下さって感謝いたします。
当方はマクロ初心者で、実際にがんがんマクロを覚える必要は無いのですが、少しずつ覚えていって、解らない事を質問していました。
まとめて処理したりするのを調べるのが実用的でないと判断し、補足のようにしてみました。
一応動作していますが、マクリストの皆さんからしたら、それって変だよ、みたいなとこがあるのかなぁ? と思っています(笑)
回答ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) マクロで最終行を取得したい 4 2023/05/28 12:14
- Visual Basic(VBA) 複数csvを横に追加していくマクロについて 2 2023/04/25 09:19
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 6 2022/06/08 12:55
- Visual Basic(VBA) VBAで質問ですが、皆さんはどの様に導き出しているのでしょうか? 6 2022/05/03 21:53
- Visual Basic(VBA) まとめシートから集計シートへA列のコードが一致したら1行コピーするマクロをネット上で見つけました。こ 1 2022/08/30 14:11
- Visual Basic(VBA) 【ご教示ください】VBAの記述方法がわかりません。 2 2022/08/12 21:28
- Visual Basic(VBA) 稀に1円合いません? Sheet1から金額と個数を貼り付ける下記コードで、金額を切り上げるコードを何 3 2022/09/05 15:11
- Visual Basic(VBA) 別シートのデータを参照して値を入れたい。 まとめデータシートのC列D列の値を商品一覧シートのコードが 7 2022/08/17 13:20
- Visual Basic(VBA) フォルダの場所を可変にしたいです(マクロ) 4 2023/05/11 10:00
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたいの続き 5 2023/01/24 00:16
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルの関数について教えて...
-
エクセルを共有するとPCによっ...
-
エクセルの関数 ENTERを押...
-
VBAでブックを非表示で開いて処...
-
北九州市にあった「井筒屋ブッ...
-
WorkBooksをオープンさせずにシ...
-
シート3枚あるはずが1枚しか...
-
Excelでブックの共有を掛けると...
-
行、列の挿入がリンク先に反映...
-
【ExcelVBA】シートをそれぞれ...
-
エクセルで50行ごとに区切った...
-
Excel VBAでブックを閉じる時、...
-
EXECLの変更を保存せずにブック...
-
Excelで、複数ブックの複数シー...
-
エクセルで別ブックをバックグ...
-
リンク元ブックのPWが分からな...
-
VBA: ブックをアクティベイトで...
-
外部ブック参照が#REF!になって...
-
エクセルで参照しているデータ...
-
captionの値と実際の表示名が合...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルを共有するとPCによっ...
-
エクセルの関数 ENTERを押...
-
VBAでブックを非表示で開いて処...
-
WorkBooksをオープンさせずにシ...
-
Excelでブックの共有を掛けると...
-
エクセルで参照しているデータ...
-
Excel(2010)のフィルターが保...
-
Excelで複数ブックの同一セルに...
-
VBA バックグラウンドで別ブッ...
-
エクセルで50行ごとに区切った...
-
エクセルで「ディスクがいっぱ...
-
エクセルにおける,「ブック」...
-
エクセルファイルを開かずにpdf...
-
フォルダ内の複数ファイルから...
-
ブックのピボットを別ブックに...
-
エクセルシートの一部を送りたい
-
エクセル2016です。「ブッ...
-
エクセルで別ブックをバックグ...
-
フォルダ内の複数ファイルから...
-
複数ファイルから特定シートの...
おすすめ情報
'ファイルをオープン
Workbooks.Open "〇〇.CSV"
With Workbooks("〇〇").Sheets("〇〇")
最終行 = .UsedRange.Rows.Count
For 上行 = 1 To Int(最終行 / 2)
下行 = 最終行 - 上行 + 1
For 列変数 = 2 To 8 '対象列をBからHまで順次
temp = .Cells(上行, 列変数).Value '上側セルの値を取得=一端保存
.Cells(上行, 列変数).Value = .Cells(下行, 列変数).Value
.Cells(下行, 列変数).Value = temp
Next 列変数
Next 上行
End With
'セーブして閉じる
Workbooks("〇〇").Save
Workbooks("〇〇").Close