• 締切済み

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)

みんなの回答

  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.2

>Range(r.Offset(, 14)) O列のその行に値がないか、O列までデータがないか?

  • rukuku
  • ベストアンサー率42% (401/933)
回答No.1

同じ質問が2重に投稿されてしまったようです。 http://oshiete1.goo.ne.jp/qa4694577.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つ下を選択したいのですが ご存知の方、ご教示をお願いします。

  • エクセル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

  • エクセル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)。 以上、どうぞよろしくお願い致します。

専門家に質問してみよう