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

添付画像のように、任意の項目名(画像ではりんごとさくらんぼ)をベースに列を選択するマクロを教えてください。お願いします。

「項目ごとの列選択」の質問画像

質問者からの補足コメント

  • 特に画像中の①〜③の箇所教えていただけないでしょうか。重ね重ねすみません。

    「項目ごとの列選択」の補足画像1
    No.1の回答に寄せられた補足コメントです。 補足日時:2019/08/11 20:45
  • 画像中の字が見づらいのでこちらで質問を補足させてください(画像中の質問文と一緒です)。

    ① ↓ このEnd プロパティは一番左の列(Ctr+←)のセルを選択ということだと思いますが、なぜこのセルを選択する必要があるのでしょうか。

    ② ← なぜ変数 myRng がNothingの時のステートメントが必要なのでしょうか。

    ③ ←このif ステートメントはなぜ必要なのでしょうか。

      補足日時:2019/08/11 20:48

A 回答 (2件)

No.1です。



①について
単純にA列~2行目最終列までをループさせているだけです。
>Cells(2, Columns.Count).End(xlToLeft).Column
で2行目の最終列が取得できます。

②について
Rangeオブジェクトで何もセットされていないRangeに
UNIONメソッドで他のRangeをセットしようとしてもエラーになります。
試しに
>If myRng Is Nothing Then
>Set myRng = Cells(2, j)
>Else
>Set myRng = Union(myRng, Cells(2, j))
>End If


>Set myRng = Union(myRng, Cells(2, j))
だけにしてみてください。
この部分でエラーになってしまいます。

③について
単なるエラー処理です。
万一2行目項目名に「りんご」または「さくらんぼ」がない場合
myRngには何もセットされていないコトになり、
選択する列が見つからないためエラーになります。
すなわち、念のためのIFです。

こんな感じで良いでしょうかね。m(_ _)m
    • good
    • 0
この回答へのお礼

完全にわかりました。ありがとうございます。
tom04さんがいなければ、このステートメントにたどりつのは不可能だったと思います。本当にありがとうございます。

最近マクロの勉強を始めまして、もしかしたらまた色々質問させてもらうかもしれませんが、その折よろしくお願いします。

お礼日時:2019/08/12 09:55

こんばんは!



一例です。
画像ではD列から2行目が項目になっていますが、
とりあえず、A列から検索しています。

Sub Sample1()
 Dim j As Long
 Dim myRng As Range
  For j = 1 To Cells(2, Columns.Count).End(xlToLeft).Column
   If Cells(2, j) = "りんご" Or Cells(2, j) = "さくらんぼ" Then
    If myRng Is Nothing Then
     Set myRng = Cells(2, j)
    Else
     Set myRng = Union(myRng, Cells(2, j))
    End If
   End If
  Next j
   If Not myRng Is Nothing Then
    myRng.EntireColumn.Select
   End If
End Sub

こんな感じではどうでしょうか?m(_ _)m
この回答への補足あり
    • good
    • 0
この回答へのお礼

早速の回答ありがとうございます。上手く行きました。

>とりあえず、A列から検索しています。

お時間あるときで構いませんので、このマクロの基本的気な発想を教えていただけないでしょうか。
"For j = 1 To Cells(2, Columns.Count).End(xlToLeft).Column " あたりから何をなさっているのか、私には少しレベルが高く理解が追いつきません。大変恐縮ですが、よろしくお願いします。

お礼日時:2019/08/11 19:50

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