いつもこのコーナーでは皆様にお世話になっております。以下のVBAマクロが組める方ご教示ください。
Sheet2にあるデータに複数条件でソートをかけ、ある数字(1から18まで)を入れたら、オートフィルタでE列のデータの選択部をSheet1のある部分に1行貼り付けるという作業です。以下のInputBoxに数字を入れるところからです。
(ソート後、どの数字を入れるか判断)
↓
InputBoxにある数字"○"(1から18まで)を入れる
↓
オートフィルタE列「"○-"で始まる」or「"-○"で終わる」
↓
抽出されたデータのE列(1列だけ)のデータ(上から17個分)を選択
↓
選択部をコピー
↓
Sheet1を選択。Sheet1の"K5"セルに行列を入れ替えて貼り付け
という流れなのですが・・・
わかる方教えてください。よろしくお願いします。
No.4ベストアンサー
- 回答日時:
#3 は、また、ミスです。
(集中力が落ちてきました。)# 訂正後:
Dim Cr1 As Variant
Dim i As Long, c As Range
この回答への補足
動作確認しました。するとF1セルにある▼が青色になっており(抽出データはなし)、それをクリックして(オプション)をクリックすると
「○-」で始まる OR 「○-」で始まる
となっていました。だからデータが抽出されないんですね!
ちなみに、▼クリック後(すべて)をクリックすると全データが表示されます。(元に戻ります)
おそらくマクロの
Criteria1:="=" & Cr1 & "-*", _
Operator:=xlOr, _
Criteria2:="=" & Cr1 & "-*"
部分がおかしいのではないかと考えられますが、いかがでしょうか?
(私にもっと力があればこの部分を修正して手直しすればいいのですが、やってみても改善できませんでした。情けない・・・)
修正できますか?おねがい致します。
難題に対し、何度も(集中力がなくなりつつも)回答くださり頭の下がる思いでいっぱいです。今マクロを実行する時間がないのでまだ試していませんが、明日までには必ず動作確認いたします。
結果についてはまた「お礼」の欄に記載する予定です。
No.3
- 回答日時:
すみません。
変数の宣言の訂正があります。製作段階では、置いていた変数を省略しましたので、以下のように張り替えてください。× Dim AFilterRng As Range, Cr1 As Variant
× Dim myPickUp, i As Long, c As Range
↓
訂正後:
Dim As Range, Cr1 As Variant
Dim i As Long, c As Range
以上のとおりです。
No.2
- 回答日時:
こんにちは。
>データが仮にB列からJ列までしかなくても、上のマクロの「With Range("A1").CurrentRegion」という記述でOKですか?
たぶん、A1に隣り合っているデータがあれば、範囲は取れますが、固定した範囲でしたら、
例:
With Range("B1:J50")
このようにした方がより良いです。
しかし、データが可変の場合は、このようにしてください。
With Range("B1", Range("B65536").End(xlUp).Offset(, 8))
この意味は、B1 とB列の最後から上に上っていって、データのあるところの範囲を、右に、J列まで拡大する、ということです。
>右隣のF列(数値)でした。申し訳ありません。
前: For Each c In .Range(Cells(2, 5), Cells(2, 5).End(xlDown)). _
↓
For Each c In .Range(Cells(2, 6), Cells(2, 6).End(xlDown)). _
ということになりますね。
これ以外の部分は、よろしいのですか?
回答者Wendy02さんへ
#4のあとチャレンジして修正してみました。
するとなんとできたではありませんか!!
該当部分を
Criteria1:="=" & Cr1 & "-*", _
Operator:=xlOr, _
Criteria2:="=" & "*-" & Cr1
で行けました。ただ不思議なことにE列なのに
Field:=4で
貼り付けたい列はF列なのに
前: For Each c In .Range(Cells(2, 5), Cells(2, 5).End(xlDown)). _
のほうで正解でした。A列に何もデータがなくB列からK列までに入っているのが原因ですかね~
何はともあれうまく行きました。ありがとうございました。とてもうれしいです。
No.1
- 回答日時:
こんにちは。
ちょっと確認しますが、
>抽出されたデータのE列(1列だけ)のデータ(上から17個分)を選択
のデータは、文字列ですね。そうでないと今の方法は無理だと思います。
当然、フィールド名(1行目のタイトル名)はありますね。つまり、データの上からと言っても、E1 は、貼り付けデータとしないということです。そのように作られています。
>Sheet1を選択。Sheet1の"K5"セルに行列を入れ替えて貼り付け
行列を入れ替えというよりは、縦のデータを横に入れ替えて貼り付けするということですね。
'---------------------------------------------------
'<なるべく標準モジュールに設定してください>
Sub PickUpSort()
Dim AFilterRng As Range, Cr1 As Variant
Dim myPickUp, i As Long, c As Range
'
Worksheets("Sheet2").Select
'--ソート後---
'エラーチェック(この部分は必要なければ、取り除いてください)
With Range("A1").CurrentRegion
If .Count = 1 Then
MsgBox "オートフィルタは作れません.", vbCritical
Exit Sub
End If
'
Do
Cr1 = Application.InputBox("1~18までの数字を入れてください", Type:=2)
If VarType(Cr1) = vbBoolean Or Cr1 = "" Then
Exit Sub
ElseIf CLng(Cr1) < 1 Or CLng(Cr1) > 18 Then
MsgBox "1~18までの数を入れてください", vbInformation
End If
Loop Until CLng(Cr1) > 0 And CLng(Cr1) < 19
.AutoFilter _
Field:=5, _
Criteria1:="=" & Cr1 & "-*", _
Operator:=xlOr, _
Criteria2:="=" & Cr1 & "-*"
For Each c In .Range(Cells(2, 5), Cells(2, 5).End(xlDown)). _
SpecialCells(xlCellTypeVisible)
Worksheets("Sheet1").Range("K12").Offset(, i).Value = c.Value
If i = 17 Then Exit For
i = i + 1
Next
End With
Beep '終了の合図
End Sub
'---------------------------------------------------
この回答への補足
すみません。ひとつ当方のミスがございました。
オートフィルタで抽出するデータはE列で「文字列」で間違いないのですが、上から17個分選択するのはその右隣のF列(数値)でした。申し訳ありません。
あとは確認事項のとおりで、
フィールド名(1行目のタイトル名)はあります。
E1 は、貼り付けデータとしないということです-でOKです。
行列を入れ替えというよりは、縦のデータを横に入れ替えて貼り付けするということです。相違ございません。
データが仮にB列からJ列までしかなくても、上のマクロの「With Range("A1").CurrentRegion」という記述でOKですか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) Excelに文字データのみを貼り付けたい 8 2023/05/03 15:38
- Excel(エクセル) 結合セルのソートについて 5 2022/04/22 11:57
- Excel(エクセル) Excel フィルタ後のコピー貼付けと可視セルの関係について 3 2023/02/07 16:42
- Visual Basic(VBA) サブフォルダ(データ)にある複数の.xlsxファイルのSheet3のA2セルの値で01から左側をB2 2 2022/08/14 15:46
- Excel(エクセル) Excelにの以下の設定方法について教えてください! C列にデータ入力の設定をしています。(出、入を 3 2022/06/22 01:33
- Excel(エクセル) VBA 特定の列に入っているテキストをコピペ 2 2023/06/14 11:24
- Excel(エクセル) Excelの50音順ソートを全ての行列に適用するには? 4 2022/12/05 11:28
- Excel(エクセル) マクロVBA別Excelブックにデータ転記 2 2022/07/10 23:35
- Excel(エクセル) 関数EXACT(文字列,文字列)とexcelVBA 3 2022/04/14 15:07
- Visual Basic(VBA) Excel(VBA) 特定の条件に該当する行の値、書式を同じセルにコピ&ペーストしたいです 1 2022/05/21 18:18
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで1列に500行並んだデ...
-
Excelで2つのデータの突合せを...
-
複数の条件に合う行番号を取得...
-
excel:別シートの値を飛び飛び...
-
Countifよりも早く重複数をカウ...
-
エクセルで日付から日にちを削...
-
Excelで2行単位のソートの出来...
-
エクセルで、重複データを除外...
-
エクセルVBA C列に特定の文字列...
-
Excelの30個ずつの平均値の出し方
-
不要な行を消したい
-
エクセルで横並びの複数データ...
-
Excel差し込み印刷:データが表...
-
EXCELでの重複データカウント方...
-
EXCELで○ヶ月を○年○ヶ月に変換...
-
A1セルに入力したら、入力時間...
-
ある倍数だけを塗りつぶす方法 ...
-
複数の文字列のいずれかが含ま...
-
参照先セルに値が入っていない...
-
エクセルの複数のセルを一括で...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで日付から日にちを削...
-
複数の条件に合う行番号を取得...
-
エクセルで1列に500行並んだデ...
-
Excelで2つのデータの突合せを...
-
Excelで2行単位のソートの出来...
-
excel:別シートの値を飛び飛び...
-
エクセルで、重複データを除外...
-
Countifよりも早く重複数をカウ...
-
Excelの30個ずつの平均値の出し方
-
エクセルで横並びの複数データ...
-
エクセルVBA C列に特定の文字列...
-
VBA 数式を最終行までコピー
-
500行の中から、多い順に抽出す...
-
エクセルで1つの会社名に対して...
-
【エクセル】1列内に複数ある同...
-
VBA 大きなtxtテキストファ...
-
エクセルで時刻だけを抜き出す...
-
エクセル~空白のセルのある行...
-
Excelの関数でこんな処理ができ...
-
Excel VBA 【QueryTables.Add】...
おすすめ情報