[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『オートフィルダで抽出した後の処理』(関数がにがて)
お知恵を拝借したく、投稿します。
VBAでオートフィルタをかけ取得したデータを
文章にして別シートに貼り付けたいです。
データ
A B C 1 ?? 分類 産地 2 1 りんご 青森 3 2 みかん 蒲郡 4 3 りんご 信州 5 4 ぶどう 信州 6 5 みかん 和歌山 7 6 なし 千葉 8 8 ぶどう 山梨 9 9 みかん 三ヶ日 10 ・ ・ ・ 11 ・ ・ ・
貼り付けたい文章は「みかん」でフィルタをかけた場合
「みかんは蒲郡・和歌山・三ヶ日です」としたいです。
色々調べてみたのですが、行ごとコピーするなどは有ったのですが、
私がしたい複数の産地を「・」ではさみ、続けて文章にする方法はわかりませんでした。
どうしたらよいか途方に暮れています。
よろしくお願いいたします。
< 使用 Excel:Excel2010、使用 OS:Windows7 >
>「みかんは蒲郡・和歌山・三ヶ日です」としたいです。 これだけならAutoFilterは要らないのでは? 単純にループしてB列が"みかん"だったらC列の文字を連結させるだけでしょ?
こういう方法もありますが、あくまでも参考程度に
Sub test() Dim myStr myStr = "みかん" If Not IsNumeric(myStr) Then myStr = Chr(34) & myStr & Chr(34) MsgBox Join(Filter(Evaluate("transpose(if(b1:b10000=" & myStr & ",c1:c10000))"), False, 0), "・"), , Replace(myStr, """", "") End Sub
(seiya) 2018/06/04(月) 11:37
Dim s As String Dim c As Range Const myKey As String = "みかん"
With ActiveSheet.Range("A1").CurrentRegion .AutoFilter Field:=2, Criteria1:=myKey For Each c In Intersect(.Offset(1), .Columns(3).SpecialCells(xlCellTypeVisible)).Cells s = s & "・" & c.Value Next .AutoFilter End With
MsgBox myKey & "は、" & Mid(s, 2) End Sub
こういう感じですかね。。。
(まっつわん) 2018/06/04(月) 14:28
>VBAでオートフィルタをかけ取得したデータを >文章にして別シートに貼り付けたいです。
既にフィルタが掛かっていることが前提なら
Sub test() Dim r As Range, msg As String With ActiveSheet If Not .AutoFilterMode Then MsgBox "フィルター無し" Exit Sub Else For Each r In .Range("b2", .Range("b" & Rows.Count).End(xlUp)).SpecialCells(12) msg = msg & IIf(msg <> "", "・", """" & r.Value & """ は ") & r(, 2).Value Next End If MsgBox msg End With End Sub (seiya) 2018/06/04(月) 15:53
現在の作業でオートフィルダをかけて行っていたので、
「オートフィルタで」とお願いしました。
その他にも方法はあるのですね。
お二人のコードを読み解きながら作業を行います。
また、わからないことがあったら聞きに来ます。
取り急ぎ、お礼まで
(関数がにがて) 2018/06/04(月) 17:09
教えていただいた、オートフィルダを使用しない方法を行ってみました。
MsgBoxでは問題なく行えたのですが、セルに値を入力しようとした所、
エラーが出ました。
コンパイルエラー:
修正候補:ステートメントの最後
Range("E1") = Join(Filter(Evaluate("transpose(if(b1:b10000=" & myStr & ",c1:c10000))"), False, 0), "・"), , Replace(myStr, """", "")
↑このコンマが選択されています。
どうすれば良いのでしょうか?
(関数がにがて) 2018/06/06(水) 10:21
>どうすれば良いのでしょうか?
VBAは基本的に、行単位で処理されるため、一行が長いからといって、
勝手に命令文を改行してはいけません。
(まっつわん) 2018/06/06(水) 15:06
MsgBox関数の引数の問題ですので、
セルに出力するなら Range("E1").Value = Replace(myStr, """", "") & "は" & _ Join(Filter(Evaluate("transpose(if(b1:b10000=" & myStr & ",c1:c10000))"), False, 0), "・") & _ "です"
(きまぐれ) 2018/06/06(水) 16:01
まっつわんさん、関数がにがてさんはこちらの掲示板に改行せずに書き込んでいるが行頭に半角スペースを入れていないので 掲示板のシステムによって改行させられてしまっている。 行頭に半角スペースを入れていると勝手に改行させられずに入力した通りの表示になる。 (ねむねむ) 2018/06/06(水) 16:20
入力者が実際にどのように入力したかはページの頭のほうにある「差分」ボタンをクリックした画面で確認できる。 (ねむねむ) 2018/06/06(水) 16:22
きまぐれさんので出来ました。
そして、掲示板の入力について不手際があり、申し訳ありませんでした。
また一つ勉強になりました。
(関数がにがて) 2018/06/07(木) 09:11
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.