アプリ版:「スタンプのみでお礼する」機能のリリースについて

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

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

A 回答 (2件)

日本語にしてみました。



ブック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列の文字列結合をさせているのでしょう。メモ帳の中だけで書いています。実際に動かしていませんのでご承知おきください。

この回答への補足

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

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
    • good
    • 0
この回答へのお礼

お忙しい所ありがとうございました。
参考になりました。またよろしくお願いします。

お礼日時:2002/02/02 09:04

>応用が利かないので、少し教えてください。

下記の意味を教えてもらえますか。
>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画面で、表示→オブジェクトブラウザで調べると、意味が理解できると思います。
    • good
    • 0
この回答へのお礼

よくわかりました。ありがとうございました。

お礼日時:2002/02/16 08:48

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!