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

以下のような条件でセルを選択したいのですが、教えていただけないでしょうか。

A1から、A列のどこかにある”あ”が入っているセルの一つ上のセルまでの範囲内で、データがある最終セルまでを選択したい。
以下の例だと、”あ”が入っているのはA6なので、A1からA5の範囲内でデータがあるセル、A1からA3を選択したい)

《例》
   A   B   C
1  000
2  111
3  222
4
5
6   あ

よろしくお願いします。

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

  • うれしい

    早速のご回答ありがとうございます。
    ここから質問するのが失礼である事は承知の上で、さらに以下についても教えていただけますか?

    ご回答いただいたA1からA3までのセル選択プラス、A列”あ”セルの下のセルからデータのある最終セルまでを選択してコピーしたい。(”あ”はA列内に一つのみ存在します)

    最近マクロの勉強を始めたばかりで色々調べてはいるものの、『マクロの登録』で少しカスタマイズはできても、基礎や法則をまだ理解しきれておらず四苦八苦しています。
    どうかよろしくお願いします。

    No.1の回答に寄せられた補足コメントです。 補足日時:2022/08/13 00:06
  • どう思う?

    ありがとうございます。
    色々と情報不足で申し訳ありません。

    ”あ”が含まれている、という解釈で大丈夫です。 
    また、”あ”セルは少なくとも1行目には存在せず、”あ”セルの直上のセルだけは必ず空白です。
    ”あ”セルの直下以降、該当範囲内にデータが存在しない場合もあり、その場合は選択しない、という設定はできますか。

    以下が想定されるケースです。
    《ケース1:”あ”セル直下にデータあり》
    →A1からA3とA7からA8を選択したい
       A   B   C
    1  000
    2  111
    3  222
    4
    5
    6   あ
    7  333
    8  444
    9    

    《ケース2:”あ”セル直下以降にデータなし》
    →A1からA4のみ選択
       A   B   C
    1  000
    2  111
    3  222
    4  555
    5
    6   あ
    7
    8
    9

    以上で情報は足りますでしょうか。

    No.2の回答に寄せられた補足コメントです。 補足日時:2022/08/13 00:53

A 回答 (5件)

No.4の回答で、勉強させていただきました。



Sub mmb()
Range("A2:A" & Rows.Count).Select
' A列の2行目以下の全行のセルを選択
Selection.Find(What:="あ", LookAt:=xlPart).Activate
' 選択している範囲で、セルの値が"あ"である一番目のセルをアクティブに
ActiveCell.Interior.ColorIndex = 6
Set yyyy = Selection.ColumnDifferences(ActiveCell)
' 選択している範囲で、セルの値が"あ"ではないセルを yyyyとする
yyyy.Interior.ColorIndex = 7
Set yyyys = yyyy.SpecialCells(xlCellTypeConstants)
' yyyyの中で、固定値(文字、数値)、論理値(True,False)、エラーのセルを yyyysとする
Set yyyyv = yyyy.SpecialCells(-4123)
' yyyyの中で、数式のあるセルを yyyyvとする
Union(yyyys, yyyyv).Select
' yyyysの範囲とyyyyvの範囲との両方を選らぶ
Selection.Interior.ColorIndex = 4
' 選択している内部の色を 綠に
End Sub
「マクロ セルの選択」の回答画像5
    • good
    • 0

質問文からは読み取れない仕様を都合よく解釈して良いのであれば、こんなのでも行けそうな気がします。



Sub sample()
Range("A2:A" & Rows.Count).Select
Selection.Find(What:="あ", LookAt:=xlPart).Activate
Selection.ColumnDifferences(ActiveCell).Select
Selection.SpecialCells(xlCellTypeConstants, 23).Select
End Sub
    • good
    • 1

#1です


ご指摘ありがとうございます
ざっくりでしたのでざっくりコードのみで回答してしまいました。

>A列”あ”セルの下のセルからデータのある最終セルまでを選択してコピーしたい。

乗りかかった船なので プロシージャにしてコード、ロジックを書きました
やり方は色々あると思いますので一例です

説明を1つ1つ書いた方が良いと思いましたのでコメントとして書きましたので参考にしてください

Sub Sample()
'変数宣言 すべてセル範囲などを示すオブジェクト型
Dim r As Range, rng As Range
Dim firstCell As Range, lastCell As Range
'オブジェクト型変数への代入はSetで行う
Set firstCell = ActiveSheet.Range("A1")
Set lastCell = ActiveSheet.Cells(Rows.Count, "A") '一番下のセル

'Find メソッドで"あ"を含むセルを検索(VBA Findで要検索)
Set r = Range(firstCell, lastCell.End(xlUp)).Find(What:="あ", LookAt:=xlPart)
'見つかれば Not Nothing で無いの否定
If Not r Is Nothing Then
'シート関数CountBlankで空白セルをカウント
'1行目からなので見つけた行№ -1より少なければどこかに値がある
If Application.CountBlank(Range(firstCell, r.Offset(-1))) < r.Row - 1 Then
'見つけた1つ上のセルが空白でなければ
If r.Offset(-1) <> "" Then
'A1から見つけた1つ上のセルまでを変数にセット
Set rng = Range(firstCell, r.Offset(-1))
Else
'見つけた1つ上のセルが空白ならば、
'A1から 見つけた1つ上のセルより上方の値のあるセルまで変数にセット
Set rng = Range(firstCell, r.Offset(-1).End(xlUp))
End If
End If
'見つけたセルの下に値のあるセルがあるか
If r.End(xlDown) <> lastCell Then
'値があれば見つけたセルの1つ下のセルから値のある最後のセルまでを変数にセット
Set rng = Union(rng, Range(r.Offset(1), lastCell.End(xlUp)))
End If
End If
'上記説明で出てきたので割愛
If Not rng Is Nothing Then rng.Copy
End Sub

コピーで終了しています

補足
Rows.Count シートの行数(総数)を表します
.End(xlUp) Ctrl+↑キー操作同様? (記録できます)
.End(xlDown) Ctrl+↓キー操作同様?
.Offset セル参照位置の変更 Range("A1").Offset(1,1) この場合B2
Unionメソッド セル範囲を合体するようなもの(調べて)
If 条件分岐 調べて

>基礎や法則をまだ理解しきれておらず四苦八苦しています。
分かり難い書き方、回答かと思いますが、一応説明、補足を付けました
解らない所はメソッドやプロパティで調べてください
    • good
    • 1

こんばんは



>”あ”が入っているセル
というのは、"あ"が含まれているという解釈で良いのですよね?
また、該当範囲が存在しない場合の記述がありませんけれど、その場合は、勝手に「B1セルが選択された状態になる」としてあります。
"あ"が複数存在する場合は、最初の(=行番号の小さい)セルを基準にします。

以下のような感じではいかがでしょうか?

Sub Q13091910()
Dim c As Range, r As Long
Range("B1").Select
Set c = Columns(1).Find(What:="あ", LookAt:=xlPart, After:=Cells(Rows.Count, 1))
If Not c Is Nothing Then
For r = c.Row - 1 To 1 Step -1
If Cells(r, 1).Value <> "" Then Cells(1, 1).Resize(r).Select: Exit Sub
Next r
End If
End Sub


※ 差し出がましくて申し訳ありませんけれど、No1様のロジックだと以下のようなケースで上手くいかないかもしれません。
・"あ"が1行目に存在する場合(これは問題ないかもですが)
・"あ"があるセルの、直上のセルまで値が入っている場合
この回答への補足あり
    • good
    • 0

こんばんは


Dim r As Range
Set r = Range("A1", Cells(Rows.Count, "A").End(xlUp)).Find(What:="あ", LookAt:=xlPart)
If Not r Is Nothing Then Range("A1", r.Offset(-1).End(xlUp)).Select

"あ"を含む値のセルは上から最初に見つかったセルが基準になります
"あ"の値がある場合処理され、無ければ処理されません
処理された場合に上全てに値が無くともA1は選択されます
この回答への補足あり
    • good
    • 0

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