Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


19629 / 76732 ←次へ | 前へ→

【62532】Re:inputbox false で 終了しない
発言  kanabun  - 09/7/29(水) 9:07 -

引用なし
パスワード
   ▼チューリップ さん:

> >If StrPtr(msg1) = 0& Then Exit Sub
> この0の後についている&は何ですか?

& は「型宣言文字」と呼ばれるもので、このばあい
数値0のデータ型は 整数(Integer)% でなく、長整数型
であることを明示しています。
単に
  If StrPtr(msg1) = 0 Then Exit Sub
で何ら問題はないのですが、細かいこというと、
VBE は 0 をみて 数値0を格納できる最小の型すなわち
Integer型の0% と解釈し、それとStrPtr(msg1)の戻り値とを
比較するために、0を長整数型&に 一度変換(型キャスト)して
から判断をしています。なので、最初から 0&と0の型を明示して
比較するコードを書いておけば、その分無駄な型変換をしなくて
済み、効率的というわけです。


>>Intersect(.Columns(2), .Offset(1)).Value = msg2

>Intersectは、共有しているセルを返すメソッドですよね。
 はい。
>columns(2)はシートの2列目、すなわちB列だと思うんですが、
 いいえ。.Columns(2) とColumns(2)のまえにドットが付いて
いますから、Worksheets("Sheet1")の
  .Range("A2").CurrentRegion という範囲の 2列目範囲の
ことです。シートの2列目はWorksheets("Sheet1").Columns(2)
です。
>offset(1)というのがよくわかりません。
>どの行に対してオフセットしているのでしょうか?

全体で何をしようとしているのかというと、
まず、AutoFilter.Range全体から、その2列目だけを取り出したい
という要求があり、AutoFilter範囲.Columns(2) で実現しています。
もうひとつ、範囲の1行目は列見出しなので、この先頭行を除外
したいという要求があり、そのため Offsetプロパティを使って
範囲を「1行下へシフト」しています。
[A1:F1000]がAutoFilter.Rangeだとすると、
[A1:F1000].Offset(1) が参照する範囲は [A2:F1001]です。
先ほど.Columns(2)プロパティで 範囲の2列目だけ取り出しました。
 [A1:F1000].Columns(2) が参照する範囲は [B1:B1000] です。

Intersect([A1:F1000].Columns(2), [A1:F1000].Offset(1))
は、
Intersect([B1:B1000], [A2:F1001])
という範囲のことで、最終的に
 [B2:B1000] という
2列目の 先頭見出しをカットしたセル範囲がえられています。
この範囲[B2:B1000] に 文字列msg2 を代入すると、Excelの
仕様で、[B2:B1000]の「可視セル」だけに値が代入されます。
ループで1行づつ可視行かどうかを調べていく必要はありません。

IntersectとOffsetプロパティの合わせ技は便利なので、
たとえば 表から 行見出し、列見出しを除いたデータ範囲を
取り出すのに使ったりします。
たとえば、下表のばあい、
   A   B   C   D   E
1     1月  2月  3月  4月
2 ああ  10  35  55   20
3 ええ  20  30  45   25
4 おお  35  45  55   35

そのデータ範囲は
 With [A1:E4]
   Set 範囲 = Intersect(.Cells, .Offset(1,1))
 End With
すなわち、[A1:E4]範囲と,それを右下方向に1セルづつShiftした
範囲とのIntersectする範囲となります。

78 hits

【62524】inputbox false で 終了しない チューリップ 09/7/28(火) 19:42 質問
【62525】Re:inputbox false で 終了しない kanabun 09/7/28(火) 20:09 発言
【62528】Re:inputbox false で 終了しない チューリップ 09/7/28(火) 22:04 お礼
【62527】Re:inputbox false で 終了しない kanabun 09/7/28(火) 21:57 発言
【62529】Re:inputbox false で 終了しない チューリップ 09/7/28(火) 22:06 お礼
【62531】Re:inputbox false で 終了しない チューリップ 09/7/28(火) 23:51 質問
【62532】Re:inputbox false で 終了しない kanabun 09/7/29(水) 9:07 発言
【62553】Re:inputbox false で 終了しない チューリップ 09/7/29(水) 18:14 お礼
【62534】Re:inputbox false で 終了しない yoshi 09/7/29(水) 10:51 回答
【62537】Re:inputbox false で 終了しない kanabun 09/7/29(水) 12:07 発言
【62539】Re:inputbox false で 終了しない yoshi 09/7/29(水) 12:48 回答
【62545】Re:inputbox false で 終了しない kanabun 09/7/29(水) 14:44 発言
【62554】Re:inputbox false で 終了しない チューリップ 09/7/29(水) 18:16 お礼

19629 / 76732 ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free