
No.4ベストアンサー
- 回答日時:
Sub test()
Dim rg As Range, ur As Range, fc As Range
Set ur = UsedRange
Set rg = ur.Find("順位", ur.Item(ur.Count))
Set fc = rg
Do While Not rg Is Nothing
MsgBox Range(rg, rg.End(xlToRight).End(xlDown)).Address
Set rg = ur.FindNext(rg)
If rg.Address = fc.Address Then Exit Do
Loop
End Sub
これで領域化があっているなら
このmsgboxで使った領域を用いて
SUB を呼び出して加工すれば如何でしょうか?
回答ありがとうございます。
領域化はほぼ正しく選択されていましたが
順位がないところもあってその場合は並び替えなかったり、
合計のところは範囲から除外するのでちょっと工夫する必要がありますが
とても参考になります。
とりあえず自分で端から最大列行まで1個ずつ見ていくやり方でなんとか作りましたが、
当たり前ですが処理が重たいのでこの領域指定を参考にして書きなおそうと思います
No.9
- 回答日時:
No.8です。
>シートには結合セルがつかわれていて結合を解除しないとエラーが出ました。
行の途中で結合セルがあると「並び替え」の時にエラーになるはずです。
そのため前回のコードは画像のA1~C4セルのように
最終行だけ結合があっても対応できるコードにしていました。
結合セルを解除してマクロを実行されたというコトですので、
少しコードに手を加えました。(★の行だけです)
Sub Sample2()
Dim myStr As String, c As Range
Dim myS As Long, endRow As Long, endCol As Long
Dim myFound As Range, myFirst As Range
Dim myRng As Range, myArea As Range
myStr = "a支店、佐藤、東京、埼玉、千葉、福岡"
Set myFound = Cells.Find(what:="順位", LookIn:=xlValues, lookat:=xlWhole)
If Not myFound Is Nothing Then '//←念のため//
Set myFirst = myFound
GoTo 処理
Do
Set myFound = Cells.FindNext(after:=myFound)
If myFound.Address = myFirst.Address Then Exit Do
GoTo 処理
処理:
Set myRng = myFound.CurrentRegion
myS = myFound.Row + 1
endRow = myRng(myRng.Count).Row
If Cells(endRow, myFound.Column).MergeCells Then
endRow = endRow - 1
End If
endCol = myRng(myRng.Count).Column
Set myArea = Range(Cells(myS, myFound.Column), Cells(endRow, endCol))
myArea.Sort key1:=myArea(1), order1:=xlAscending, Header:=xlNo
For Each c In myArea
If c <> "" And InStr(myStr, c) > 0 Then '//←少し条件を追加★//
Range(Cells(c.Row, myFound.Column), Cells(c.Row, endCol)).Interior.ColorIndex = 3
End If
Next c
Loop
End If
End Sub
上記のマクロを実行すると
画像のように左側の表が右側の表のようになりました。
こちらではお望みの動きになったと思ったのですが、
お手元の表の具体的なレイアウトが判らないので
まずはこの程度で・・・m(_ _)m

No.8
- 回答日時:
こんばんは!
一例です。
各表は隣接していない!という前提です。
(表と表の間は必ず1列・1行以上離れている)
Sub Sample1()
Dim myEnd As Long, myStr As String, c As Range
Dim myS As Long, endRow As Long, endCol As Long
Dim myFound As Range, myFirst As Range
Dim myRng As Range, myArea As Range
myStr = "a支店、佐藤、東京、埼玉、千葉、福岡"
Set myFound = Cells.Find(what:="順位", LookIn:=xlValues, lookat:=xlWhole)
If Not myFound Is Nothing Then '//←念のため//
Set myFirst = myFound
GoTo 処理
Do
Set myFound = Cells.FindNext(after:=myFound)
If myFound.Address = myFirst.Address Then Exit Do
GoTo 処理
処理:
Set myRng = myFound.CurrentRegion
myS = myFound.Row + 1
endRow = myRng(myRng.Count).Row
If Cells(endRow, myFound.Column).MergeCells Then
endRow = endRow - 1
End If
endCol = myRng(myRng.Count).Column
Set myArea = Range(Cells(myS, myFound.Column), Cells(endRow, endCol))
myArea.Sort key1:=myArea(1), order1:=xlAscending, Header:=xlNo
For Each c In myArea
If InStr(myStr, c) > 0 Then
Range(Cells(c.Row, myFound.Column), Cells(c.Row, endCol)).Interior.ColorIndex = 3
End If
Next c
Loop
End If
End Sub
こんな感じではどうでしょうか?m(_ _)m
回答ありがとうございます。
シートには結合セルがつかわれていて結合を解除しないとエラーが出ました。
また結合を解除して使うと、セルの参照がずれて表がおかしくなり処理自体も
If InStr(myStr, c) > 0 Then で型が一致しないと言われエラーとなりました。。。
No.7
- 回答日時:
条件付き書式だけといったが
条件付き書式が案外ややこしかったので
追記しておきます。
まずa支店、佐藤、東京、埼玉、千葉、福岡の
候補をどこかのシートで縦に並べて
名前定義しておきます。(仮に今回は着目って名前にしました)
(候補数が変動するなら名前定義 可変領域で検索して
追随する式に変更してください)
それが表の2列目にあるものという前提で
表が仮にE1:H10の場合
そこを選択して条件付き書式で
数式を使用して書式設定するセルを決定を選び
=MATCH(OFFSET(A1,0,6-COLUMN(A1)),着目,0)
書式は塗りつぶしの赤です。
途中の6が表の始まり列+1の数字になります。
VBAではマクロの記録で上記操作をして
そこを選択してというのはSELECT不要なので
Selection の所にSubへの引数である
msgboxが指していた領域を用います。
次に数式の6の部分のみ領域のRange変数名に続けて
.Columns(2).column
とすればA列からの時は2、E列の時は6になります。
回答ありがとうございます。
実際の作業で塗りつぶさせたい候補がたくさんあったので
条件式書式は使わず、塗りつぶしたい候補を配列にいれて
配列内のデータと一致する行の背景色を変更させる方法を取りました。

No.6
- 回答日時:
>表もA列から始まるとは限らない。
・・・とのことですが、本件、表の位置を決めてしまうのが、本来の解決法かと思いますが、
表の列を決められない理由は何でしょうか。
その理由、背景等が判れば、別の解決法が見つかるかもしれません。
表の位置を決められないのは表は別のシートで作られているもので、
複数シートに渡り、ばらばらにつくられている為、すべてに対応できるようにさせたいからです。
No.5
- 回答日時:
>選択範囲を拡張して昇順ソート
拡張は要らないですね。
領域は指定済だから。
基本選択(Select)もほとんど要らないです。
手で操作すると選択しなきゃ勿論操作できないけど
マクロの記録はSelectionにその時の選択セルを
書けば成り立つ場合が多いです。
その場合直前のSELECTが無用ということで。
No.3
- 回答日時:
あ、失礼しました。
右上の表以外変わってない気がしたもので、N2~8の例のみ出しましたが、どちみち範囲が列全体になっているので失敗ですね。N2~8であれば=SMALL(E$2:E$8,ROW()-ROW(N$1))とするべきでした。
左下の表も変わっているし、左上・右下の表はたまたま変わっていないだけで、順位どおりに並べているわけですね。
E$2:E$8とN$1をそれぞれ該当する範囲・タイトル行にすれば対応できます。
『順位』と表示されているセルを基準として考えると分かり易いかと。
回答ありがとございます。
表は実際には複数シートにまたがり、また位置も大きさもバラバラだったので
並び替えたい範囲を条件式によって端から選択させて逐一並び替える事でうまく行きました。
No.2
- 回答日時:
VBAの式は分からないので、関数によって別のセルに表示させる場合を説明します。
関数でできることは同様にしてVBAでできるのだろうと思いますので、考え方の参考まで。
並び替え
同順位があるようですので、作業列を用いてIDを割り振ります。
ID=順位&"-"&その順位がそのセルで何回目か(同着が無い場合は必ず-1、同着があれば上から順に-1,-2…)
N2~8はSMALL(E:E,ROW()-1)とすることで、その行に表示する順位を算出させます。
作業列を用いてIDに変換します。検索用のIDの計算については、先ほどのIDと同様です。
MATCHを使って検索用のIDと一致するIDの行番号を取得します。
INDIRECTと取得したいデータの列名、取得した行番号、を用いて、検索用IDと一致する行の県・件数・合計を表示します。
これによって並び替えは完了です。
セルに色をつけるのは条件付書式で可能かと思われます。
No.1
- 回答日時:
(表もA列から始まるとは限らない。
)この時点で、じゃあどうやって見つけるのかを書かずに
プログラムに出来ると考えてはるんでしょうか?
プログラムは指示した通りのことはやりますが
指示もしないことを自発的にしたりしません。
しかも、内容はソートと条件付き書式だけなので
マクロ記録できるし、後はその領域の決め方を
コードにするだけです。
その肝心の領域の決め方を記述せずに
どうすることもできません。
その領域の決め方の記述法に苦戦している感じです。
今考えてるのは
①:"順位"と書かれているセルの位置を上から調べて検索し変数に入れる
②:①で調べたした位置から下、数字(順位の数字)が入っている範囲を選択
③:選択範囲を拡張して昇順ソート
④:次の”順位”の位置を検索
という感じで行けばと思ってますが…
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) マクロ実行時、自動で背景色を変えたい。 C列にあるチェックボックスをチェックするとB列に「TRUE」 4 2022/11/08 11:14
- Visual Basic(VBA) 昨日、質問した件『VBA にて、条件付き書式で背景色を設定しているセルの範囲で、背景色付きのセルをカ 4 2022/04/07 14:39
- その他(Microsoft Office) スプレッドシートにて、条件付き書式で複数の単語に合致するセルを着色したいです。 2 2023/04/06 13:25
- Excel(エクセル) こんなことできますか?例えば、sheetに貼り付けた図形のタイトルを、セルA1の文字で表示する。 5 2022/04/22 15:25
- その他(ブラウザ) zoomのバーチャル背景が選べない 4 2022/12/08 12:38
- Visual Basic(VBA) エクセルVBAについて 2 2023/01/31 16:21
- Excel(エクセル) エクセル マクロ 行や列を削除しても 常にC3セルに背景色を維持 6 2023/04/04 02:07
- Windows 95・98 タスクバーの背景の色だけを変えたい。 2 2022/07/13 14:44
- Windows 8 動画の再生とタイトルの変更方法を教えてください。 3 2022/08/01 14:51
- Visual Basic(VBA) エクセルから、パワーポイントのスライドを複数作成する。 1 2022/07/08 09:40
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルの関数について
-
エクセルのリストについて
-
【マクロ】元データと同じお客...
-
エクセルのVBAで集計をしたい
-
【画像あり】オートフィルター...
-
【マクロ】数式を入力したい。...
-
【マクロ】【相談】Excelブック...
-
【マクロ】変数に入れるコード...
-
Office2021のエクセルで米国株...
-
【マクロ】実行時エラー '424':...
-
【マクロ】左のブックと右のブ...
-
エクセルの複雑なシフト表から...
-
【マクロ】別ファイルへマクロ...
-
他のシートの検索
-
エクセルシートの見出しの文字...
-
vba テキストボックスとリフト...
-
【マクロ】【配列】3つのシー...
-
ページが変なふうに切れる
-
【マクロ】オートフィルターの...
-
【マクロ】列を折りたたみ非表...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
9月17日でサービス終了らし...
-
エクセル
-
【マクロ】WEBシステムから保存...
-
エクセルの循環参照、?
-
エクセル ドロップダウンリスト...
-
エクセルのdatedif関数を使って...
-
特定のセルだけ結果がおかしい...
-
【マクロ】A列にある、日付(本...
-
【マクロ】EXCELで読込したCSV...
-
【マクロ】アクティブセルの時...
-
【エクセル】期限アラートについて
-
iPhoneのExcelアプリで、別のシ...
-
【関数】同じ関数なのに、エラ...
-
Excelの新しい空白のブックを開...
-
【マクロ】3行に上から下に並...
-
【マクロ】宣言は、何のために...
-
VBA チェックボックスをオーバ...
-
Excelについての質問です 並べ...
-
【マクロ】アクティブセルの2...
-
【関数】不規則な文章から●●-●●...
おすすめ情報