いつもこのコーナーでは皆様にお世話になっております。以下の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で質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
ちょっと先の未来クイズ第2問
9月9日(月)に発表される「第3回子どもマネー川柳」に入賞する川柳を考えてこちらに投稿してください。
-
フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
あなたが普段思っている「これまだ誰も言ってなかったけど共感されるだろうな」というあるあるを教えてください
-
映画のエンドロール観る派?観ない派?
映画が終わった後、すぐに席を立って帰る方もちらほら見かけます。皆さんはエンドロールの最後まで観ていきますか?
-
海外旅行から帰ってきたら、まず何を食べる?
帰国して1番食べたくなるもの、食べたくなるだろうなと思うもの、皆さんはありますか?
-
天使と悪魔選手権
悪魔がこんなささやきをしていたら、天使のあなたはなんと言って止めますか?
-
【VBA】 可視セルの一部をコピー
Word(ワード)
-
もしセルが#N/A"なら~をする・・・には?"
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excelで2行単位のソートの出来...
-
Excelの30個ずつの平均値の出し方
-
エクセルで1列に500行並んだデ...
-
Excel VBA 【QueryTables.Add】...
-
複数の条件に合う行番号を取得...
-
エクセルで、重複データを除外...
-
エクセル あ 1/10 1/11 1/12 1/...
-
エクセルで横並びの複数データ...
-
Excelでデーターが多いので、平...
-
差し込み印刷 «Next Record»に...
-
Countifよりも早く重複数をカウ...
-
エクセルで日付から日にちを削...
-
エクセル2016にて、行挿入&コピ...
-
500行の中から、多い順に抽出す...
-
excel:別シートの値を飛び飛び...
-
エクセルの複数のセルを一括で...
-
A1セルに入力したら、入力時間...
-
Excelで同じセルに箇条書きをし...
-
お肉の下のシートを煮込んでし...
-
EXCELで○ヶ月を○年○ヶ月に変換...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで日付から日にちを削...
-
エクセルで1列に500行並んだデ...
-
複数の条件に合う行番号を取得...
-
Excelで2行単位のソートの出来...
-
excel:別シートの値を飛び飛び...
-
Excelの30個ずつの平均値の出し方
-
エクセルで、重複データを除外...
-
Excelで2つのデータの突合せを...
-
Countifよりも早く重複数をカウ...
-
VBA 数式を最終行までコピー
-
エクセルで1つの会社名に対して...
-
エクセル2016にて、行挿入&コピ...
-
エクセルで横並びの複数データ...
-
エクセルVBA C列に特定の文字列...
-
VBA 大きなtxtテキストファ...
-
エクセル~空白のセルのある行...
-
500行の中から、多い順に抽出す...
-
不要な行を消したい
-
本日の日付を超えているものを...
-
【Excel】小計単位で並べ替えを...
おすすめ情報