OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
解決
済み

マクロの意味について

  • すぐに回答を!
  • 質問No.209916
  • 閲覧数467
  • ありがとう数2
  • 気になる数0
  • 回答数2
  • コメント数0

下記の様なマクロがあります。意味が理解できていません。
教えてもらえないでしょうか。

Windows("aaa.XLS").Activate

Dim tbl, gyo, burank
Range("i4").Select
Set tbl = ActiveCell.CurrentRegion
tbl.Offset(1, 0).Resize(tbl.Rows.Count - 1, tbl.Columns.Count).Select
Stop
Selection.Copy

Windows("bbb.XLS").Activate
Sheets("ccc").Select
Range("B2").Select
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
Application.CutCopyMode = False

Range("A2").Select
Application.CutCopyMode = False
ActiveCell.Formula = "=B2&C2&D2"
Range("A2").Select
Selection.Copy

gyo = 0
Do
gyo = gyo + 1
burank = Worksheets("ccc").Cells(gyo, 2).Text
Loop While burank <> ""
Range(Cells(3, 1), Cells(gyo - 1, 1)).Select

   ActiveSheet.Paste
Application.CutCopyMode = False
Range("A2").Select
通報する
  • 回答数2
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

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

  • 回答No.2
レベル13

ベストアンサー率 68% (791/1163)

>応用が利かないので、少し教えてください。下記の意味を教えてもらえますか。
>tbl.Offset(4, 0).Resize(tbl.Rows.Count - 4, tbl.Columns.Count - 8).Select
>Selection.Copy
>tbl.Offset(4, 5).Resize(tbl.Rows.Count - 4, tbl.Columns.Count - 5).Select
>Selection.Copy

tbl.Offset(4, 0)
 セル領域tblの左上コーナーから、行方向に4行下がったセル。列方向の移動はゼロ。
 例えば、最初のセル領域tblがI1:X1000とすると、tbl.Offset(4, 0)=I5です。
 左上コーナーは.Offset(0, 0)になるわけです。

.Resize
 指定された範囲のサイズを変更します。Resize(行数,列数)のように使います。
 この場合は行数=tbl.Rows.Count - 4
      列数=tbl.Columns.Count - 8
 なので、セル領域tblでOffset位置を基点に、上4行と列数を8列減らした範囲に変更しています
.Select
 Resizeで変更したセル領域を選択


.Offset(4, 5)の方も同様ですね。
 最初のセル領域tblがI1:X1000なら、4回下がって、5回右に動いた位置から範囲を決めています。

VBE画面で、表示→オブジェクトブラウザで調べると、意味が理解できると思います。
お礼コメント
noname#72697

よくわかりました。ありがとうございました。
投稿日時 - 2002-02-16 08:48:18
-PR-
-PR-

その他の回答 (全1件)

  • 回答No.1
レベル13

ベストアンサー率 68% (791/1163)

日本語にしてみました。 ブックaaaをアクティブにする   Windows("aaa.XLS").Activate   Dim tbl, gyo, burank セルI4を選択   Range("i4").Select アクティブセル領域tblを定義。セルI4を含む空白行と空白列で囲まれた領域。多分連続的にデータが入力されているのでしょう ...続きを読む
日本語にしてみました。

ブックaaaをアクティブにする
  Windows("aaa.XLS").Activate

  Dim tbl, gyo, burank
セルI4を選択
  Range("i4").Select
アクティブセル領域tblを定義。セルI4を含む空白行と空白列で囲まれた領域。多分連続的にデータが入力されているのでしょう
  Set tbl = ActiveCell.CurrentRegion
アクティブセル領域tblの一番上の行を除外したものをtblに再定義して選択。多分、表題を除いている
  tbl.Offset(1, 0).Resize(tbl.Rows.Count - 1, tbl.Columns.Count).Select
止めている?
  Stop
アクティブセル領域tblをコピー
  Selection.Copy

ブックbbbをアクティブにする
  Windows("bbb.XLS").Activate
ブックbbbのシートcccを選択
  Sheets("ccc").Select
セルB2を選択
  Range("B2").Select
セルB2を左上にして、アクティブセル領域tblを値貼り付け
  Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
  False, Transpose:=False
  Application.CutCopyMode = False

セルA2を選択
  Range("A2").Select
  Application.CutCopyMode = False
セルA2に算式『=B2&C2&D2』をセット。B、C、D列を文字列結合しようとしている
  ActiveCell.Formula = "=B2&C2&D2"
算式を登録したセルA2を再度選択
  Range("A2").Select
セルA2をコピー
  Selection.Copy

下のDoLoopで貼り付けた行数をカウントしようとしている。先判定にすべきか
 行カウンタを初期化
  gyo = 0
  Do
   行カウンタを進める
    gyo = gyo + 1
   行カウンタの行のB列のデータを取り出し『burank』に保存
    burank = Worksheets("ccc").Cells(gyo, 2).Text
  取り出した『burank』が未登録(空白セル)になるまで続ける
  Loop While burank <> ""
最終行が求まったので、A3から対応するA列の最終行まで選択する
ここで最終行は1行余分に数えているので『-1』している
  Range(Cells(3, 1), Cells(gyo - 1, 1)).Select
コピーしてあったセルA2を貼り付け。これでB列のデータ分、算式『=B2&C2&D2』がセットされる
  ActiveSheet.Paste
  Application.CutCopyMode = False
セルA2を選択
  Range("A2").Select


要は、ブックaaaのデータ部分をブックbbbに貼り付けて、A列にB、C、D列の文字列結合をさせているのでしょう。メモ帳の中だけで書いています。実際に動かしていませんのでご承知おきください。
補足コメント
noname#72697

応用が利かないので、少し教えてください。下記の意味を教えてもらえますか。

tbl.Offset(4, 0).Resize(tbl.Rows.Count - 4, tbl.Columns.Count - 8).Select
Selection.Copy

tbl.Offset(4, 5).Resize(tbl.Rows.Count - 4, tbl.Columns.Count - 5).Select
Selection.Copy
投稿日時 - 2002-02-02 10:10:36
お礼コメント
noname#72697

お忙しい所ありがとうございました。
参考になりました。またよろしくお願いします。
投稿日時 - 2002-02-02 09:04:31

このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
このやり方知ってる!同じこと困ったことある。経験を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ