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

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

このQ&Aに関連する最新のQ&A

A 回答 (2件)

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

下記の意味を教えてもらえますか。
>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

日本語にしてみました。



ブック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

このQ&Aに関連する人気のQ&A

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

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qあまのじゃくってどういう意味ですか?

あまのじゃくってどういう意味ですか?

Aベストアンサー

かっこつけたり、恥ずかしがったりして、自分の感情や思いをうまく表現できないこと。天邪鬼。

参考URL:http://ja.wikipedia.org/wiki/%E3%81%82%E3%81%BE%E3%81%AE%E3%81%98%E3%82%83%E3%81%8F

Qfalseとtrue 0,1,-1 の意味が知りたいです

こんにちは。
大分前からなんとなくしっくり行かないことがあります。
excel でのワークシートの関数vlookupなどの引数に
true/false がありますよね。
絶対値の絶対のイメージがtrue・・の気分なのですが結果は逆でした。

IF関数では
真→true  偽→false だったと思います。
私はIF関数でのtrue/false のイメージはしっくりいきます。
vlookupはどーしても納得いくイメージが持てません。
どなたか教えていただけませんか?どんな風にとらえればいいのか。

しかも確かACCESSやVBAの中では
true→-1 false→0
vlookupでは
true→1 false→0
じゃなかったでしたっけ?
こちらの考えも??
こっちの方は以前知り合いに説明を受けて一度は納得したのですが、
今はよくわからなくなってしまいました。
教えてください。

Aベストアンサー

>vlookupはどーしても納得いくイメージが持てません。
>どなたか教えていただけませんか?どんな風にとらえればいいのか。
どっちをどっちにするかは、2つに1つなので、どっちがどっちでもいいのかもしれません。
個人的には、VLOOKUP 関数は、表引きする関数なので、何らかの値を返して欲しい、なので、返さない場合があるFALSE の場合が偽(規定の動作ではない)という風に思っています。

>VBAの中では
>true→-1 false→0
>vlookup(※ワークシート上)では
>true→1 false→0
既に、色々説明されている通りですが、
ワークシート上でTRUE を数値として計算に使ったらどうなるか?
については、経験上 1 だとわかっていますが、
ヘルプなどには、数値として計算できるとか論理値TRUE が1であるとかは、書いていなかったと思います。
なので、そのように使っているというのは、単に経験則によるもので、
保証された動作ではないと思います。(私自身も便利なのでよく使っていますけど)
ワークシート上で、1な理由は
例えば、
あるセルの値が100の時50プラスするというような場合、
=A1+IF(A1=100,50,0)
のように書く必要がありますが、
論理式を使って
=A1+(A1=100)*50
のように書くことができます。
もしワークシート上での論理値TRUEが-1だったとしたら
=A1-(A1=100)*50
としなければならず、結果としては目的を達成できるとしても、
意図することが+なのに、-しなければならないので違和感があります。多分そのようなことから1になっているのだろうと思います。

VBAについては、
ヘルプのブール型の説明を見て貰えるとわかりますが、
「16 ビット (2 バイト) の変数です…
他の数値型をブール型の値に変換すると、0 は偽 (False) になり、0 以外の値はすべて真 (True) になります。一方、ブール型の値を他のデータ型に変換すると、偽 (False) は 0、真 (True) は -1 になります。」
とあります。
つまり、0が偽でそれ以外の値は真になるのですが、
デフォルトの真が-1なのは、
ビット演算でNOTを16ビットの変数に取った場合、
0000000000000000→1111111111111111
で1111111111111111 になりますが、これは、16ビット符号付きの数字で言うと-1になります。
逆に-1のNOTをとったら0になるので、
このようにしていると思われます。

以上は、個人的な推測ですので、意味はありません。
一般的には、真値、偽値を数値として扱うときに何になるかはプログラム言語で違いますし、そうした計算を許さないものもあります。
意味的にはそうした論理値を数値計算に使うのはおかしいことでしょうね。

>vlookupはどーしても納得いくイメージが持てません。
>どなたか教えていただけませんか?どんな風にとらえればいいのか。
どっちをどっちにするかは、2つに1つなので、どっちがどっちでもいいのかもしれません。
個人的には、VLOOKUP 関数は、表引きする関数なので、何らかの値を返して欲しい、なので、返さない場合があるFALSE の場合が偽(規定の動作ではない)という風に思っています。

>VBAの中では
>true→-1 false→0
>vlookup(※ワークシート上)では
>true→1 false→0
既に、色々説明されてい...続きを読む

Qどういう意味だと思いますか?

彼とLINEしていると
「返事がおくれてごめん、あまのじゃくなもので・・・」と
返事がありました。

たわいもないことをLINEでやりとりしているのですが

あまのじゃくになるというのは・・・
回答に困って返事が遅れるという意味でしょうか?

Aベストアンサー

返事が早かったり遅かったり、気まぐれだということじゃないですか?

遅れてごめんと謝ってくるところが全くあまのじゃくだとは思いませんけどね。

QMS-wordで,ワイルドカードを用い,n人(1, 2, 3)を3人(1, 2, 3)に置換

ワイルドカードを用いた置換の仕方についてお伺いします.

用いているのはword for mac 2004です.

n人(1, 2, 3)や、n人(2, 3, 4)や、n人(3, 4, 5)
n人(1, 2, 3, 4)や、n人(2, 3, 4, 5)や、n人(3, 4, 5, 6)

といったものを,

3人(1, 2, 3)や、3人(2, 3, 4)や、3人(3, 4, 5)
4人(1, 2, 3, 4)や、4人(2, 3, 4, 5)や、4人(3, 4, 5, 6)

という風に,nを()内の数字の個数に一度に置換したいのですが,

検索文字列は
n人(1, 2, 3)や、n人(2, 3, 4)や、n人(3, 4, 5)の場合は

n人(?, ?, ?)

で検索できることはわかっているのですが,置換後の文字列はどのようにすればよいでしょうか?
ちなみに数字やn、カンマとその後のスペースは半角,括弧は全角です.

よろしくお願いします.

Aベストアンサー

ワイルドカードを使用した場合、()で閉じた内容が一つの式として認識
されますので、(n)が一つ目の式で「n」だけを条件にして、(人(?, ? ))
のようにすることで二つ目の式にして「(人(?, ? )」をまとまった式
にします。

検索条件にした式を参照するのが、\ 記号と式の順番である数字である
「\1」や「\2」のようなものを置換の条件にします。(半角で指定)
今回の場合は、最初の式を変えるので n=\1 ですから \1=3 になること
から、式をそのまま参照するときの \1\2 が 3\2 になるのです。

このように式を利用することで、特定の文字列を参照したときに、その
一部だけを置換する場合に効果的に利用できるようになります。
もっと条件が多い場合では、Wordの置換機能では無理な場合もあります
ので、その場合は正規表現ができるもので置換することになりますが、
今回は関係ないことなので具体的には説明しません。

ちなみにマクロについては、私に提示できる技量が現時点では無いので
回答しませんが、条件としては以下のようなものでマクロを組むことに
なると思います。

検索・置換の条件を指定してのマクロ
**************************************************************
検索する()内の数字の個数を数え、その個数を検索する対象にある
n と置き換えることで、個数が増えても一括で n を個数に置換する。
**************************************************************
これをマクロで組むことで、数字の個数が増えてもマクロが自動で置換
してくれると思います。

ワイルドカードを使用した場合、()で閉じた内容が一つの式として認識
されますので、(n)が一つ目の式で「n」だけを条件にして、(人(?, ? ))
のようにすることで二つ目の式にして「(人(?, ? )」をまとまった式
にします。

検索条件にした式を参照するのが、\ 記号と式の順番である数字である
「\1」や「\2」のようなものを置換の条件にします。(半角で指定)
今回の場合は、最初の式を変えるので n=\1 ですから \1=3 になること
から、式をそのまま参照するときの \1\2 が 3\2 になるのです。

この...続きを読む

Q「あまのじゃく」に相当する英語は?

和英辞書を引いてみますと、色々な英語が出て来ます。
perverse or cussed person; contrarian とか。
それらの英語を逆引きすると、「つむじ曲がりの」とか「意固地な」とかの日本語になって、本来の日本語の意味の「あまのじゃく」に相当しません。

皆がこう言ったらいつも反対あるいは、別のことを言いたがる人。あるいは、何かが評判になったりして、多数の人がそこに殺到する時、その風潮に絶対に乗ろうとしない人。

私が捉えている「あまのじゃく」ですが、こんな性格の人は英米圏には殆んどいないから、それに相当する英語がないと言うことでしょうか?
もし、近い英語があれば教えて下さい。

宜しくお願いします。

Aベストアンサー

 yes-man, yes-sayer(はいはいと言うことを聞く人)の対義語、no-man, no-sayer(違う違うとごねる人)が近いだろうと思います。

QApplication.OnTime が動作するタイミング(vba)

まず10秒たってからtest2222と表示させて、次にtestと表示させるプログラムを以下のように作成したのですが、なぜか先にtestが表示されて、次にtest2222が表示されます。
なぜなのでしょうか?
分かる方がいれば教えてください。
よろしくお願いします。

Sub aa()

Application.OnTime Now + TimeValue("00:00:10"), "kara"

MsgBox "test"

End Sub

Sub kara()
MsgBox "test22222"
End Sub

Aベストアンサー

OnTime は実行を予約するだけで直ぐに次の行に移るようです。
実行を遅らせたいなら Timer を使えば良いかと思います。

Qあまのじゃくな男性

中学生男子に
あまのじゃくな人は結構いますか?

あと中学生男子は
普通に女子の肩に触れたりは
するもんですか?

回答お願いします(*´∇`*)

Aベストアンサー

中学生はあまのじゃくが多い年代でしょう。

女の子に対し興味が無いようなふりをしたり、悪態をついたり。

肩に触れるのはある程度親しいしるしだと思います。

QFALSEを非表示にしたい

いつもお世話になってます。

Win98 Excel97です。

=IF(L6=1,1400,IF(L6=2,1500,IF(L6=3,1600,IF(L6=4,1700,IF(L6=5,1800,IF(L6=6,2900))))))という数式で料金を反映させているのですが空白の時にFALSEと出てしまいます。過去ログで探したのですがよくわかりません。
おわかりになる方よろしくお願い致します

Aベストアンサー

N6は、M6が空白の場合に同様に空白にするとします。
N6の数式は、

=IF(ISNUMBER(M6),K6*M6,"")

とします。
次に、P6はN6が空白の場合にN6分は0として計算するとします。
P6の数式は、

=IF(ISNUMBER(N6),N6,0)+O6+J6

とします。

上記とは違う結果にしたい場合は、補足して下さい。

Qあまのじゃく・・・

なんとなく、あまのじゃくな性格です。
この性格ってどうしてこうなるの?
解決する方法とかありますか?

Aベストアンサー

同じくあまのじゃくです(笑)
#1さんのおっしゃること、確かに当たってるような気が・・・。
私は最近は、思わず言い返してしまっても
後で家に帰ってから反省をするようにしています(笑)
あまり役に立つか分かりませんが
参考程度に読んでおいていただけるとありがたいです。

QエクセルVBAでApplication.SumとWorksheetFunction.Sum

以下のVBAはどれもまったく同じ答えを返しますが、どのような違いがあるのでしょうか?
違いがないなら一番短い書き方をしようと思います。
よろしくお願いします。

MsgBox Application.WorksheetFunction.Sum(Range("C21:C23"))
MsgBox WorksheetFunction.Sum(Range("C21:C23"))
MsgBox Application.Sum(Range("C21:C23"))

Aベストアンサー

MsgBox Application.WorksheetFunction.Sum(Range("C21:C23"))
MsgBox WorksheetFunction.Sum(Range("C21:C23"))
MsgBox Application.Sum(Range("C21:C23"))

>ans= Application.WorksheetFunction.Sum(Range("C21:C23"))
>ans= WorksheetFunction.Sum(Range("C21:C23"))

この2つは、基本的には同じですね。これは、97以上の書法です。Application を省略しても、ワークシート関数は使えます。しかし、Sum関数の引数にエラー値があると、両方とも「実行時エラー」になるはずです。VBAで回避するためには、On Error トラップが必要になりますね。

>ans = Application.Sum(Range("C21:C23"))
こちらは、古いVersionの書き方ですが、エラー値そのものが、上記の場合は、ans に返るはずです。ただし、ansは、変数型はVariant 型です。
どちらでも良いと思います。

なお、短くするなら、
ans = Evaluate("Sum(C21:C23)")
という方法もあります。

MsgBox Application.WorksheetFunction.Sum(Range("C21:C23"))
MsgBox WorksheetFunction.Sum(Range("C21:C23"))
MsgBox Application.Sum(Range("C21:C23"))

>ans= Application.WorksheetFunction.Sum(Range("C21:C23"))
>ans= WorksheetFunction.Sum(Range("C21:C23"))

この2つは、基本的には同じですね。これは、97以上の書法です。Application を省略しても、ワークシート関数は使えます。しかし、Sum関数の引数にエラー値があると、両方とも「実行時エラー」になるはずです。VBAで回避するために...続きを読む


人気Q&Aランキング