[[20180604102606]] 『オートフィルダで抽出した後の処理』(関数がにがて) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『オートフィルダで抽出した後の処理』(関数がにがて)

お知恵を拝借したく、投稿します。

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


Sub Macro1()
    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

seiyaさん、まっつわんさん
ありがとうございます。

現在の作業でオートフィルダをかけて行っていたので、
「オートフィルタで」とお願いしました。
その他にも方法はあるのですね。

お二人のコードを読み解きながら作業を行います。
また、わからないことがあったら聞きに来ます。

取り急ぎ、お礼まで
(関数がにがて) 2018/06/04(月) 17:09


seiyaさんに質問があります。

教えていただいた、オートフィルダを使用しない方法を行ってみました。
MsgBoxでは問題なく行えたのですが、セルに値を入力しようとした所、
エラーが出ました。

コンパイルエラー:
修正候補:ステートメントの最後

Range("E1") = Join(Filter(Evaluate("transpose(if(b1:b10000=" & myStr & ",c1:c10000))"), False, 0), "・"), , Replace(myStr, """", "")

                                                                                                       ↑このコンマが選択されています。

どうすれば良いのでしょうか?
(関数がにがて) 2018/06/06(水) 10:21


コンパイルエラーというのは、
文章の書き方がVBAのルールに則っていないことを示します。

 >どうすれば良いのでしょうか?
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.