-
三流君の [コンビニ系HPへ] [VBA系HPへ] [ASP系HPへ] [愚痴系HPへ]

<Excel97 VBA Rangeオブジェクト>

サンプル→0214.LZH 76KB をダウンロードして、見てください。
Excel97 test0214.xls が入っています


義理チョコも、もらえなかったKen3です。
(自分へ一言、、、おいおい、メルマガに関係ネエだろが、、、そうですね)

ってのは、置いといて、(あと、チョコ画像シャレで送るの止めてください、)
今回は、久しぶりに、Excel VBA 関係?です。
*なんて大きく言ってますが、たいしたことないです。

あっ、逃げないで下さい、そろそろ、まじめに始めますから。

下記の質問をいただきました。チョット長めですが。
------------------------------------------------------
 >マクロの記録くらいは前から使ってたんですが、
 >最近VBAの方に近寄りつつある初心者です。
 >
 >で、今、作成しているマクロがうまくいきません。
 >多分とっても初歩な部分が判ってないからだとは
 >思うんですが、どうしていいやらさっぱりです。
 >
 >すみません。お手数ですが、是非、ご教授下さい。 
 >
 >やりたいこと。
 >・x1・x2とy1・y2の2組の数値の比較結果(大小)から、
 >該当する図形(□が二つ組み合わさったもの)を判断し、
 >各項目の下に貼り付けたい。(項目は全部で10個)
 >
 >今出来ていること。
 >・数値を判断して、"AI4:AM4", "AI6:AM6"の各セルに
 >"Case1"〜"Case4"を表示。(シート上(IF)で処理)
 >・基本図形(4通り)にそれぞれ"Case1"〜"Case4"の
 >名前を付け、上記セルの値に応じてそれぞれをコピーする。
 >(この部分は以下の様にかきました)
 >
 >  For Each BoxRange In ActiveSheet.Range("AI4:AM4", "AI6:AM6")
 >        Select Case BoxRange
 >            Case Is = "Case1"
 >                    Case1.Copy
 >            Case Is = "Case2"
 >                    Case2.Copy
 >            Case Is = "Case3"
 >                    Case3.Copy
 >            Case Is = "Case4"
 >                    Case4.Copy
 >        End Select
 >    ※
 >    ActiveSheet.Paste
 >
 >"AI4:AM4", "AI6:AM6"の下("AI5:AM5", "AI7:AM7")に
 >それぞれ、どこに貼りつけるか、セル番地を入れてます。
 >(D2,D16,D30,D44・・,O44,O48といったように)
 >
 >※の処にどう書けば、うまく動いてくれるのでしょうか?
 >
 >OffsetとCollectionの辺りをじたばた試してみましたが、
 >だめでした。書き方が間違ってたのかも・・。
 >
 >きっとす・・・ごくつまらない質問だと思います、すみません。
 >でも・・もうどうしていいか判らない状態になってしまいました。
 >
 >VBAの入口でじたばたしている私に救いの手を。
 >どうかよろしくお願い致します。
------------------------------------------------------
なんか、おしい、、あと少しって気がする。
ここまで、できてれば、と思いますが、勝手にあとひと押し作ってみます。
*実行サンプルをダウンロードして、動きをみてください。

まずテストで、下記のようなテストの表を作成します。
 A  B  C  D  E  F  G  H     I     J     K     L
1
2                     Case1 Case2 Case3 Case4 Case2
3                     B6    B7    C8    C9    A10
4                     Case2 Case3 Case4 Case3 Case4
5                     A6    E8    F10   C12   A12


処理内容は、H2:L2,H4:L4の範囲を選択し、 条件を判断します(文字列、Case1から4まででどの画像をセットするか判断) 判断後、目的の画像を選択します。 次に、その下のセルの番地へ、画像を貼り付けます。 これを範囲数分繰り返します。 '--- 下記、私が作成したサンプルです Sub Macro1() Dim boxrange As Range '処理範囲 Dim x As Integer Dim y As Integer 'さてと、ループで回しますか、、、 For Each boxrange In ActiveSheet.Range("H2:L2,H4:L4") '位置を取りだし、ワーク変数に代入 x = boxrange.Column y = boxrange.Row '中身をテストで表示 MsgBox Cells(y, x) & "を判断して" & Cells(y + 1, x) & "にセット" 'セットしたい図形をselect文で判断 Select Case boxrange Case "Case1" ActiveSheet.Shapes("case1").Copy Case "Case2" ActiveSheet.Shapes("case2").Copy Case "Case3" ActiveSheet.Shapes("case3").Copy Case "Case4" ActiveSheet.Shapes("case4").Copy Case Else '選択されない時、どうすんの? エラーチェックは? End Select 'セットする位置(D10)などの文字を取りだし、そのセルを選択 Range(Cells(y + 1, x)).Select 'ポインタみたいな間接参照? ActiveSheet.Paste 'コピーした図形を貼る Next '適当なセルを選択して、終わりにする(図形が選択されたままなので) Range("H7").Select 'エラー処理入っていないけど、こんな感じです。 '素朴な疑問、データを変更して、再実行した時、前回の図形を消したいのでは? End Sub '---------------------------------------------------------------- とりあえず、実行結果は下記のようになります。
ポイントは、 範囲数分繰り返したいので、Rangeオブジェクトを使用し、 For Each文で回します(コレの詳細解説も、宿題だなぁ、、、たぶん) >For Each boxrange In ActiveSheet.Range("H2:L2,H4:L4") 次のポイントが、.Column , .Row プロパティを使用して、 現在処理中のセルの位置を取り出します。 > '位置を取りだし、ワーク変数に代入 > x = boxrange.Column > y = boxrange.Row でセルの位置がわかるので、 それを使用して、今度はYに1を+した(一行下の文字を取り出します) > 'セットする位置(D10)などの文字を取りだし、そのセルを選択 > Range(Cells(y + 1, x)).Select 'ポインタみたいな間接参照? ^^^^^^^^^^^^^^^^^^↑複雑そうですがRange("D10").Select みたいな感じで、           文字列の指すセルを選択できます。 最後に、選択されたセルに、貼りつけています > ActiveSheet.Paste 'コピーした図形を貼る 処理を行ってます。 なんか、回りくどいやりかたのような、、、 (*Ken3得意のできたからイイヤプログラム、、    Activeがあったり、無かったり行儀悪い、、、      動きゃいいってもんじゃないでしょ) また、これは蛇足だ、、私ならこう処理する、、 この切り口は? など、この例題処理?課題?のうまい調理法、思いついた人は、 気軽にご指摘・文句なんでも下さい。 *でも、チョコ画像はイリマセンよ、、、少しはうれしかったけど。  (今回は、かなり困った、、イジメられた、、BMPじゃなくてせめて    JpgかGifで下さいよ、、、) 今日の一言、、  今日も、マクロ記録+簡単なプロパティの紹介でまとめやがって、、   具体的に使える、     プロらしいテクニックないの?、、、(VBAソースの書き方汚いしねぇ) やっぱ、三流だなぁ、、と声が聞こえてきたところで、このへんで、、 今日も逃げ出す、、、悪人 Ken3 でした。。。


質問や要望、クレームを送る(三流君に連絡する 連絡方法)

質問や要望など連絡方法でお互い確認が取りやすく、便利なのが掲示板なのですが、私の対応のまずさから不定期で荒れてしまい、掲示板は現在封鎖中です。(反省しなきゃ)
感想や質問・要望・苦情など 三流君へメッセージを送る。
時間的余裕のある要望・質問・苦情の場合は、下記のフォームからメッセージを送ることができます。
あなたのお名前(ニックネーム):さん
返信は?: 不用(HP更新を待つ) , E-mail→ アドレス:に返事をもらいたい

(感想や質問・要望・苦情はHPで記事に載せることがあります。)

急ぎで連絡がほしい、そんな時は:[三流君連絡先]に連絡してください。

番外編 愚痴系で書いてた今日の一品 (短いサブ関数など)

2000/05/13 SQL Count関数を使ってみる
2000/05/11 Access97 標準関数Midなどが使えない
2000/05/09 SendObjectのエンコード
2000/05/08 クエリーで〜以外とは
2000/04/27 Imagingコントロールを使ってみた
2000/04/25 Excel97 VBA イベントなど
2000/04/24 Access97で複数のプリンタを切替えて使用
2000/04/20 書式付きエクスポート DoCmd.OutputToで、できます
2000/04/19 Access97でExcel形式へExport時に書式設定を行いたい
2000/04/13 Access97でOutlook97/98とリンクする方法
2000/04/13 VBA Nameステートメント
2000/04/04 Accessでキー取得
2000/04/04 AccessでFile参照ダイアログ?
2000/04/03 縦書用数値変換改良
2000/04/01 Access Err テーブルを消したい
2000/03/31 縦書き数値、どうしてますか?
2000/03/29 VBA 手抜きで、処理後、explorerを開く
2000/03/28 Access --> Word へデータ
2000/03/24 名前一覧Excelの機能で、同じことできました
2000/03/23 Excel97 VBA セルに付けた名前一覧を作成する
2000/03/21 Excel セルに名前付け
2000/02/25 iniFileを読む GetPrivateProfileString
2000/02/15 Excel VBA Rangeオブジェクトとサンプル
2000/02/14 Access97 SizeMode/OLEサイズ で画像調整
2000/02/10 Access97 Pictureプロパティとサンプル
2000/02/09 Access97 集計クエリーで重複値をハジク
2000/02/07 Access97 サブフォームへ値をセット
2000/02/04 Access97 コントロールソース、チョットした使用法
2000/02/01 Access97 フォームフッター
2000/01/18 Access97 now()関数で有効期限処理、、、

←パソコンの技術系の書籍を探しているなら コンピュータ関連の出版社33社(アスキー、インプレス等)が共同運営するコンピュータの本・専門店 種類が豊富で探し易い※在庫ありが48時間以内発送


[三流君(TOP)]へ戻る。