VBAの並び替え方法を教えてください
- VBAを使用して選択範囲のセルを並び替える方法を教えてください。
- ColumnsとFind関数を使用してセル位置を取得し、その位置を元に並べ替えを行いたいです。
- RangeとSelection.Sort関数を使用して並び替えを試みたが、実行時エラーが発生するため解決策を教えてください。
- ベストアンサー
VBA 並び替え
たびたびお世話になります 選択範囲の並べ替えを行いたく こちらで教わった方法で セル位置の取得を行い Set r = Columns(\"A\").Find(\"b1\", lookat:=xlWhole, After:=Range(\"A\" & Rows.Count)) Set rr = Columns(\"A\").Find(\"bm123-1\", After:=r, Searchdirection:=2) その取得した位置を元に並べ替えを行いたい 範囲選択をしています Range(r, rr.Offset(, 14)).Select その後並び替えを実施したいのですが Selection.Sort Key1:=Range(r.Offset(, 14)) この様にしてみましたが 実行時エラー1004が返されてしまいます どのようにすれば 並び替えができるのでしょうか よろしくお願いします
- hou66
- お礼率50% (79/155)
- オフィス系ソフト
- 回答数1
- ありがとう数1
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは VBAでの範囲選択 並び替え http://oshiete1.goo.ne.jp/qa4692010.html の関連ですね。 関連質問されるときは、元の質問を参照しておくと、回答しようとする人にとって分かりやすくなります。 Selection.Sort Key1:=Range(r.Offset(, 14)) の「Range」が余分だと思います。 「r.Offset(, 14)」ですでにセル範囲を表しています。r.Offset(, 14)だけで十分です。 または「Range(r.Offset(, 14).Address)」とすれば上手く動くと思います。(回りくどい表現になりますが) -------- 同じ質問が二重に投稿されてしまっているようです。 下記の質問の方は「締め切り済み」にしておいてください。 http://oshiete1.goo.ne.jp/qa4694575.html
関連するQ&A
- VBA 並び替え
たびたびお世話になります 選択範囲の並べ替えを行いたく こちらで教わった方法で セル位置の取得を行い Set r = Columns("A").Find("b1", lookat:=xlWhole, After:=Range("A" & Rows.Count)) Set rr = Columns("A").Find("bm123-1", After:=r, Searchdirection:=2) その取得した位置を元に並べ替えを行いたい 範囲選択をしています Range(r, rr.Offset(, 14)).Select その後並び替えを実施したいのですが Selection.Sort Key1:=Range(r.Offset(, 14)) この様にしてみましたが 実行時エラー1004が返されてしまいます どのようにすれば 並び替えができるのでしょうか よろしくお願いします
- 締切済み
- オフィス系ソフト
- Selectした範囲の最終セルの1つ下を選択
よろしくお願いします。 Dim R As Range Dim rr As Range Set R = Columns("H").Find("○", After:=Range("H" & Rows.Count)) Set rr = Columns("H").Find("○", After:=R, SearchDirection:=2) Range(R, rr).Select で、Selectした範囲内の最終セルの1つ下を選択したいのですが ご存知の方、ご教示をお願いします。
- ベストアンサー
- Excel(エクセル)
- エクセルVBA FindNextについて
エクセル2002使用です。 VBAのFindNextメソッドについて教えていただけますでようか?不定期の行ごとに存在する○から△までの表を抽出するために次のようなコードをつくりました。 A B C D 1 ○ × × 2 × × × 3 △ × × 4 5 ○ × × 6 × × × 7 △ × × Sub 表の抜き出し() Dim myr1 as range Dim myr2 as range Dim firstmyr1 as String Set myr1 = Columns("A").Find(What:="○") firstmyr1 =myr1.adress Set myr2 = Columns("A").Find(What:="△") Do 処理・・・・ Set myr1 = Columns("A").FindNext(after:=myr1) Set myr2 = Columns("A").FindNext(after:=myr2) Loop until myr1.adress = firstmyr1 End Sub 上記のようなコードで、処理の後のSetステートメントでFindNextを使うと、A5の○とA7の△を見つけてほしいのに、1回目の処理・・・の後の読み込みでウオッチで見るとmyr1値が△になってしまって2回目の読み込みにいけません。Setステートメントが2つ以上あるときのFindNextメソッドの使い方で何か注意点があるのでしょうか? よろしくお願いします。
- ベストアンサー
- オフィス系ソフト
- エクセルVBA selectionの書き方をヘルプ!
ここで教えてもらったVBAを書き直して以下のように作りました。 Sub TEST() Dim sh1 As Worksheet Dim sh2 As Worksheet Set sh1 = Worksheets("Sheet1") Set sh2 = Worksheets("Sheet2") d = 5 For i = 1 To d Set x = sh2.Range("E7:F11").Find(What:=sh1.Cells(i, "C"), After:=ActiveCell, LookIn:=xlFormulas, LookAt:= _ xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False) If Not x Is Nothing Then sh1.Cells(i, "D") = x.Offset(0, 1) Next i End Sub ところが「RangeクラスのFindプロパティが取得できません」とエラーになってしまいます。Range("E7:F11")をCellsにすればエラーにはならないのですが、検索範囲を指定したいのです。 sh2.Select Range("E7:F11").Select を入れ、Range("E7:F11")をSelectionにすれば動くのもわかりました。でもSelectせずにやりたいのです。 わがまま言いますが、お教えくださいませ。 お願いします。
- ベストアンサー
- オフィス系ソフト
- VBAで並び替え・・・
VBAで並び替えをしたいのですが、変な範囲が選択されます。 一覧表のA5:BF5に項目が入っています。 マクロの登録でA5をクリックして、shift+ctrl+end(→)で項目を選択し、shift+ctrl+PgDn(↓)で範囲選択して ツールの並び替えで並び替え項目はA5です。 下記のコードができました。 しかしながら、エラーがでます。 よろしくお願い致します。 エクセルのバージョンは2002です。 Sheets("一覧").Select Range("A5").Select Range(Selection, Selection.End(xlToRight)).Select Range(Selection, Selection.End(xlDown)).Select Selection.Sort Key1:=Range("A6"), Order1:=xlAscending, Header:=xlGuess, _ OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod _ :=xlPinYin, DataOption1:=xlSortTextAsNumbers Range("A5").Select Sheets("現場登録検索").Select Range("C2:D2").Select
- ベストアンサー
- その他(プログラミング・開発)
- エクセルVBA Columnプロパティで・・・
エクセル2002使用です。 FindメソッドでRangeオブジェクトを取得し、Columnプロパティでそのオブジェクトの列番号をを取得し、Columnsプロパティーでその列番号が最後になる複数行を取得して、その取得した範囲の空白セルを削除しようとしています。 Dim findcell as Range Dim cl as String Set findcell = Rows(1).Find(What:="賞") cl = findcell.Column Columns(3:cl).SpecialCell(xlCellTypeBlanks).Delete Columns(3:cl)でエラーとなってしまいます。 Columnsプロパティーで複数行を取得するときは、アルファベットの列番号を指定しなければならないと思うのですが、Columnプロパティーでは、数字で列番号を取得してしまうため困っています。 Columnプロパティーでアルファベットを取得する方法 または Columnsプロパティーで複数行を数字の列番号で取得する方法で何か良い方法はありますでしょうか? よろしくお願いします。
- ベストアンサー
- オフィス系ソフト
- VBA 表の並び替え (追加質問)
先日表の並び替えでVBAを教えていただいたのですが、 できればもう少し詳しくご教授願いたいと思います。 【前回の質問】 同じ請求書内に含まれる情報をひとつの請求書列の横に並べて配置したいのですが。 請求書 製品 価格 個数 aaa AAA 200 10 aaa BBB 400 10 aaa CCC 300 5 bbb AAA 100 50 bbb BBB 500 10 請求書 製品 価格 個数 製品 価格 個数 製品 価格 個数 aaa AAA 200 10 BBB 400 10 CCC 300 5 bbb AAA 100 50 BBB 500 10 にたいして、 Sub test() Dim LastCol_1 As Long Dim LastCol_r As Long Dim LastCol_Max As Long Dim LastRow_A As Long Dim r As Long LastCol_1 = Cells(1, Columns.Count).End(xlToLeft).Column LastRow_A = Cells(Rows.Count, "A").End(xlUp).Row Application.ScreenUpdating = False 'データの並べ替え For r = LastRow_A To 3 Step -1 LastCol_r = Cells(r, Columns.Count).End(xlToLeft).Column If Range("A" & r).Value = Range("A" & r - 1).Value Then Range("A" & r).Resize(, LastCol_r - 1).Offset(, 1).Copy _ Destination:=Cells(r - 1, LastCol_1 + 1) Rows(r).Delete End If Next r '見出し行の編集 With ActiveSheet.UsedRange LastCol_Max = .Cells(.Cells.Count).Column End With Range("A" & 1).Resize(, LastCol_1 - 1).Offset(, 1).Copy _ Destination:=Cells(1, LastCol_1 + 1).Resize(, LastCol_Max - LastCol_1) Application.ScreenUpdating = True End Sub というVBAコードをいただきました。 結果は大満足だったのすが、たとえばもし請求書columnの横に繰り返したくないcolumnがもう1列ある場合はどのようにしたらよいのでしょうか。請求書番号と同様1行に1回のみ表示させたいのです。 請求書 Year 製品 価格 個数 aaa 2007 AAA 200 10 aaa 2007 BBB 400 10 ↓↓↓↓↓↓↓↓↓ 請求書 Year 製品 価格 個数 製品 価格 個数 aaa 2007 AAA 200 10 BBB 400 10 お手数ですが、コメントいただければ幸いです。
- 締切済み
- オフィス系ソフト
- VBAの比較削除マクロ
Sheet1とSheet2のB列を参照して同じ値が存在する場合は、Sheet1の行を削除するマクロを作成したいのですがどのように記述したらよいか分かりません。 Sheet1とSheet2のB列を参照して同じ値が存在する場合は、Sheet3にSheet1の行をコピーするマクロはホームページ等を参照して下記のように記述できました。 Public Sub copy() Dim tempRange As Range Dim fax1Table As Range Dim fax2Table As Range Dim dst As Range Dim FoundCell As Range 'fax1範囲指定 Worksheets("Fax1").Activate Set fax1Table = Range("a1").CurrentRegion Set fax1Table = fax1Table.Offset(1) Set fax1Table = fax1Table.Resize(fax1Table.Rows.Count - 1) 'fax2範囲指定 Worksheets("Fax2").Activate Set fax2Table = Range("a1").CurrentRegion Set fax2Table = fax2Table.Offset(1) Set fax2Table = fax2Table.Resize(fax2Table.Rows.Count - 1) '比較開始 Worksheets("fax1").Activate '見出しコピー Set dst = Worksheets("fax3").Range("a1") Range("a1:ad1").copy dst 'レコード抽出 For Each tempRange In fax1Table.Rows Set FoundCell = fax2Table.Columns(2).Find(tempRange.Columns(2).Value, , xlValues, xlWhole) If Not FoundCell Is Nothing Then Set dst = dst.Offset(1) tempRange.copy dst End If Next tempRange '比較終了 'セル幅自動調整 Worksheets("fax3").Range("a:g").Columns.AutoFit Worksheets("fax3").Activate End Sub
- ベストアンサー
- その他MS Office製品
- エクセルVBA セルを参照した文字検索でシートをアクティブにする
VBA初心者で困っています。 ブックAのシート1の“A1”の値が、同一ブック内の違うシートにあるかどうか検索し、あればそのセルをアクティブにして黄色に色づけ、なければメッセージを返すという処理をVBAで行いたいです。 似たような質問があってそれを参考にしてみましたが どうも上手く動いてくれません。 参考にさせていただいたのは Set r = Workbooks("ブックB.xls").Sheets("シート1").Columns("A") _ .Find(What:=Workbooks("ブックA.xls").Sheets("シート1").Range("A1").Value, _ LookIn:=xlValues, _ LookAt:=xlWhole, _ SearchOrder:=xlByColumns, _ SearchDirection:=xlNext, _ MatchCase:=True) If r Is Nothing Then MsgBox "no data" Else Application.Goto r Set r = Nothing End If End Sub というコードです どなたか、わかる方教えてください。
- ベストアンサー
- その他([技術者向] コンピューター)
- (エクセルVBA)並び替えの方法
この度はお世話になります。 エクセル2003で、選択したセル範囲(仮に「顧客一覧」とします)を並び替えるVBA(マクロ)を作成中です。 一応、下の方法で実現しました(リスト1)。しかし、「顧客一覧」の最下行だけ並び替えの対象からはずしたいのです。 理由は、別に行を挿入する必要があるためです(リスト2)。 行を挿入しても、そのデータが「顧客一覧」の範囲に含まれるようにしたいため、「顧客一覧」の最下行はブランクにしています。 しかし、リスト1では、ブランクの行も並び替えの対象になってしまい不都合が生じます。 セル範囲のうまい指定方法を教えていただければ幸いです (リスト1の修正をお願いします)。 '------------------------------- 'リスト1 選択範囲を並び替える '------------------------------- Sub 顧客一覧の並べ替え() Dim rowsCount As Long '表の現在行数 '行数の取得 rowsCount = Range("顧客一覧").Rows.Count '並び替える Range("顧客一覧").Sort key1:=Range("顧客一覧").Cells(1, 1), _ Order1:=xlAscending, Header:=xlGuess End Sub ------------------------------- 'リスト2 行を追加する '------------------------------- Sub 顧客の追加() Dim rowsCount As Long '表の現在行数 '行数の取得 rowsCount = Range("顧客一覧").Rows.Count '最下行に行を挿入 Range("顧客一覧").Cells(rowsCount, 1).EntireRow.Insert End Sub ※セル範囲「顧客一覧」は、初期値は B5:F10 です(A列はブランク)。 ※B列に顧客名(C~F列は住所電話番号等)を入力します。 ※並び替えの基準は「列B」/昇順 です。 ※行の挿入は最下行に行います(リスト2)。 以上、どうぞよろしくお願い致します。
- ベストアンサー
- オフィス系ソフト
お礼
ありがとうございます 無事に確認できました 投稿後に処理がおかしいなとは 思いましたが 2重投稿になっていたとは ご指摘ありがとうございます