Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


288 / 3841 ページ ←次へ | 前へ→

【76674】Re:検索ワードが3件以上ある場合の検索・...
発言  kanabun  - 15/2/25(水) 17:11 -

引用なし
パスワード
   ▼さとちぃ さん:

>(三重県の場合、三重でも検索可能)


フィルターオプション(2007以降なら データ - フィルタ - 詳細設定)という手もあると思います。

  A       B       C      D
1              県名
2              三重*
3              静岡*
4              
5
6 
7 会社名    県名      郵便番号  ○チェック欄
8 XYZ株式会社  愛知県     653-0028
9 ZD株式会社   三重県     991-3352  

上の例だと、
検索範囲  [A7:C9]
条件範囲  [C1:C3]  [C1]セルは 表の項目名「県名」と同じにする。

という範囲設定で フィルタを実行する(詳細設定を実行する)と、

「県名」列が
「三重」で始まる行 または
「静岡」で始まる行
以外は 非表示になるので、 D列で 可視行を選択して 数式バーに ○ を入力し
そのまま Ctrl + [Enter] を押すと、可視行に一括 ○ が入力される。

この操作をマクロ記録してみてください。
・ツリー全体表示

【76673】Re:条件別で選択するシートを変え、シー...
発言  kanabun  - 15/2/25(水) 17:00 -

引用なし
パスワード
   ▼さとちぃ さん:

>(1)
>リンク先のセルにはあらかじめセルに色が塗ってありまして
>教えていただいたプログラムですと、事前にセルに塗っていた
>色が白色設定となり、ヒットしたセルのみ色が変わる形に
>なっております。
>
>対象のセル以外は、色設定はそのままとするにはどのように
>すればいいでしょうか?

とりあえず、
>  r.Interior.ColorIndex = xlNone
の行をコメントにしてください。
  'r.Interior.ColorIndex = xlNone


>(2)
>
>Interior.Color = vbCyan
>
>において、文字の大きさも変えたいのですが、Fontオブジェクトで
>設定しようと試みましたが、うまく出来ません・・・。

どう試してみたのかしら?

  Do
    'ヒットしたセルがあれば 色を付け、Fontsizeを変更する
    c.Interior.Color = vbCyan
    c.Font.Size = 18 '←好きなサイズ
   
    Set c = r.FindNext(After:=c)
  Loop Until c.Address = Address1
・ツリー全体表示

【76672】検索ワードが3件以上ある場合の検索・表...
質問  さとちぃ  - 15/2/25(水) 16:48 -

引用なし
パスワード
   検索ワードが3件以上ある場合、条件にヒットした行に○を付け
その○をオートフィルタにて検索し、検索ワードの行を表示
させたいと考えてます。

検索ワードは県名です。かつ入力ワードは部分検索もできるように
したいです。(三重県の場合、三重でも検索可能)


  A       B       C      D
1              複数エリア検索
2              検索ワード1
3              検索ワード2
4              検索ワード3
 
7 会社名    県名      郵便番号  ○チェック欄
8 XYZ株式会社  愛知県     653-0028
9 ZD株式会社   三重県    991-3352  ○


以下のようにプログラムを書いてみたのですが、○がうまく入力されず
その結果オートフィルタがうまくひっかかりません。

おかしい部分をご指摘いただけませんでしょうか?


Sub エリア複数検索()
Dim i As Long
Dim kenmei1 As String  ' 県名検索条件1
Dim kenmei2 As String  ' 県名検索条件2
Dim kenmei3 As String  ' 県名検索条件3

kenmei1 = "*" & Cells(1, 3).Value & "*" ' 県名検索条件1入力セル
kenmei2 = "*" & Cells(2, 3).Value & "*" ' 県名検索条件2入力セル
kenmei3 = "*" & Cells(3, 3).Value & "*" ' 県名検索条件3入力セル

For i = 8 To Cells(Rows.Count, 1).End(xlUp).Row
    If Cells(i, 2) = kenmei1 Or _
      Cells(i, 2) = kenmei2 Or _
      Cells(i, 2) = kenmei3 Or _
      Cells(i, 5) = "○" Then
    End If
  Next i
  Range("D8:D1000").AutoFilter Field:=4, Criteria1:="○"
End Sub
・ツリー全体表示

【76671】ExcelからWordへ転記につきまして
質問  マリモ  - 15/2/25(水) 16:29 -

引用なし
パスワード
   両方に関連することなので、板違いでしたら申し訳ございません。

Wordが4ページありまして、そのヘッダー部分に
4ページ同じセルの箇所を入れ込みたくて、
ExcelのA列に記入してある数字を順番に入れ込んで
A列に記入がある分だけ、印刷をかけたいのですが、
何かいい方法はないでしょうか。

説明不足で伝わらない箇所があるかもしれませんが
よろしくお願いいたします。
・ツリー全体表示

【76670】Re:条件別で選択するシートを変え、シー...
質問  さとちぃ  - 15/2/25(水) 15:15 -

引用なし
パスワード
   KANABUN様

さとちぃです。

すみません、解決した途端、さらに欲が出てきてしまい、以下の様な
内容をVBAにやらせようと考えてます。

こちらも教えていただけませんでしょうか?


(1)
リンク先のセルにはあらかじめセルに色が塗ってありまして
教えていただいたプログラムですと、事前にセルに塗っていた
色が白色設定となり、ヒットしたセルのみ色が変わる形に
なっております。

対象のセル以外は、色設定はそのままとするにはどのように
すればいいでしょうか?

(2)

Interior.Color = vbCyan

において、文字の大きさも変えたいのですが、Fontオブジェクトで
設定しようと試みましたが、うまく出来ません・・・。

重ね重ね申し訳ありません。
よろしくお願いします!
・ツリー全体表示

【76669】Re:条件別で選択するシートを変え、シー...
お礼  さとちぃ  - 15/2/25(水) 14:23 -

引用なし
パスワード
   KANABUN様

さとちぃです。
無事動きました!
本当にありがとうございました!

先ほどのご質問の件、コードをしっかり理解しないままご質問してしまい申し訳ありませんでした!
・ツリー全体表示

【76668】Re:条件別で選択するシートを変え、シー...
発言  kanabun  - 15/2/25(水) 11:42 -

引用なし
パスワード
   ▼さとちぃ さん:

>早速のご回答ありがとうございました。
>いろいろトライしてみたのですが、
>
>Set r = Worksheets(Sheetname).UsedRange
>
>の部分にて、インデックスが有効範囲にありませんという形で
>エラーが出ます。

「インデックスが有効範囲にありません」というエラーは、今回のばあい
Sheetnameの中に入っているシート名が 実際のシート名に無い ことが原因と
考えられます。
Sheetname のなかに C列1行目の "Aグループ企業" が入っているとして、
「Aグループ企業」というシートは実際に存在しますか?

チェックのため、上の1行を複数行に分割して、
Dim r As Range
Dim ws as Worksheet
On Error Resume Next
  Set ws = Worksheets(Sheetname)
On Error Goto 0
If ws Is Nothing Then
  MsgBox Sheetname & " という名前のシートがありません"
  Exit Sub
End If
Set r = ws.UsedRange

としてみてください。


>私なりに考えてみたのですが、対象シートの選択の為に
>If文による条件設定が必要ではないかと思ったのですが
>いかがでしょうか?

元シートの1行目に 検索対象シートのシート名が書いてあるのであれば、
対象シートを Worksheets(Sheetname) で特定できるので、ジャンプしたり
選択したりする必要はありません(ただし、セル塗りつぶしの結果をみたいので
そのシートへジャンプしたいというのであれば、 ws.Activate する必要があり
ます)
・ツリー全体表示

【76667】Re:条件別で選択するシートを変え、シー...
質問  さとちぃ  - 15/2/25(水) 11:23 -

引用なし
パスワード
   KANABUN様

さとちぃです。
早速のご回答ありがとうございました。
いろいろトライしてみたのですが、

Set r = Worksheets(Sheetname).UsedRange

の部分にて、インデックスが有効範囲にありませんという形で
エラーが出ます。

私なりに考えてみたのですが、対象シートの選択の為に
If文による条件設定が必要ではないかと思ったのですが
いかがでしょうか?

つまり、

If C列に○がある場合、WorkSeet("Aグループ企業")を選択
If D列に○がある場合、WorkSeet("Bグループ企業")を選択
If E列に○がある場合、WorkSeet("Cグループ企業")を選択

といった形です。

大変恐れ入りますが、こちらも教えていただけますでしょうか?
・ツリー全体表示

【76666】Re:条件別で選択するシートを変え、シー...
発言  kanabun  - 15/2/25(水) 10:38 -

引用なし
パスワード
   失礼。コメントちがい

> 'ヒットした行があれば 色を付ける

正 'ヒットしたセルに 色を付ける
・ツリー全体表示

【76665】Re:条件別で選択するシートを変え、シー...
発言  kanabun  - 15/2/25(水) 10:36 -

引用なし
パスワード
   ▼さとちぃ さん:

>ZF株式会社は複数ある場合がありますので、複数箇所色を変える表示が望ましいです。

そのばあいは さとちぃさんがやっておられるような Findメソッドの繰り返しと
なります。
(↓こんな感じ: 下のほうを修正)

Sub 別シートの会社名セルに色を付ける2() '列を特定しない
  Dim c As Range
  Dim Sheetname As String
  Dim CompanyName As String
  
  'ActiveSheetは 「会社情報一覧」
  If ActiveCell.Column <> 1 Then Exit Sub
  'ActiveCellが A列のときだけ実行する
  
  CompanyName = ActiveCell.Value
  Set c = Cells(ActiveCell.Row, Columns.Count).End(xlToLeft)
  If c.Value <> "○" Then Exit Sub
  Sheetname = Cells(1, c.Column).Value
  
  '対象シートのA列にフィルタをかける
  Dim r As Range
  Set r = Worksheets(Sheetname).UsedRange
  r.Interior.ColorIndex = xlNone
  Set c = r.Find(CompanyName, , xlValues, xlPart)
  If c Is Nothing Then Exit Sub
  
  Dim Address1 As String
  Address1 = c.Address
  Do
    'ヒットした行があれば 色を付ける
    c.Interior.Color = vbCyan
    Set c = r.FindNext(After:=c)
  Loop Until c.Address = Address1
    
End Sub
・ツリー全体表示

【76664】Re:条件別で選択するシートを変え、シー...
質問  さとちぃ  - 15/2/25(水) 10:05 -

引用なし
パスワード
   さとちぃです。
すみません.

ご返信が遅くなりまして申し訳ありませんでした。

ZF株式会社は複数ある場合がありますので、複数箇所色を変える表示が望ましいです。
飛んだ先のシートというのは、イメージとして緊急連絡網のようなものです。そのため、
シートの全領域を検索する形となります。


ABC株式会社―ZF株式会社―123運輸株式会社―BPJAPAN株式会社・・・・

XYZ株式会社―ZF株式会社―PP運輸株式会社―BPUSA株式会社・・・・・・

ですのでシートの全領域をFind検索して、色を付ける形とすれば良いのかと考えているのですが・・・。

こちらの形でも教えていただけるとうれしく存じます。
引き続き、恐縮ですがお願い出来ませんでしょうか?


教えていただいたA列でのオートフィルタを使った表示についても別のところで参考になりまして、ありがとうございました!
・ツリー全体表示

【76663】Re:条件別で選択するシートを変え、シー...
発言  kanabun  - 15/2/24(火) 20:06 -

引用なし
パスワード
   飛んだ先のシートのA列に会社名が書いてあるとして、
A列に AutoFilter のコード例です。

Sub 別シートの会社名セルに色を付ける()
  Dim c As Range
  Dim Sheetname As String
  Dim CompanyName As String
  
  'ActiveSheetは 「会社情報一覧」
  If ActiveCell.Column <> 1 Then Exit Sub
  'ActiveCellが A列のときだけ実行する
  
  CompanyName = ActiveCell.Value
  Set c = Cells(ActiveCell.Row, Columns.Count).End(xlToLeft)
  If c.Value <> "○" Then Exit Sub
  Sheetname = Cells(1, c.Column).Value
  '対象シートのA列にフィルタをかける
  With Worksheets(Sheetname).Cells(1).CurrentRegion.Columns(1)
    .AutoFilter 1, CompanyName
    'ヒットした行があれば 色を付ける
    If .SpecialCells(xlVisible).Count > 1 Then
      Intersect(.Cells, .Offset(1)).Interior.Color = vbCyan
    End If
    .AutoFilter
  End With
    
End Sub
・ツリー全体表示

【76662】Re:条件別で選択するシートを変え、シー...
発言  kanabun  - 15/2/24(火) 17:37 -

引用なし
パスワード
   ▼さとちぃ さん:
[会社情報一覧]シート
  A     B     C       D       E
1 会社名   リンク Aグループ企業  Bグループ企業 Cグループ企業
2 ZF株式会社       ○   
3 XYZ株式会社              ○ 

こちらは たとえば、[会社情報一覧]シートの [A2]セルを選択して マクロ
ボタンを押すと、
2行目の ○ の印の入っている列が C列だから C列の1行目の「Aグループ企業」
という名前のシートのA列から "ZF株式会社" をFind し、色を付ける-----
というマクロを実行する、ということですね?

飛んだ先のシートに 検索word"ZF株式会社" は複数あるのですか?
また、その列はどの列ですか?(全列検索する必要ないですよね?)
・ツリー全体表示

【76661】Re:アクティブセルで読み込んだ値であい...
発言  kanabun  - 15/2/24(火) 16:55 -

引用なし
パスワード
   ▼さとちぃ さん:

>Worksheets("名刺情報").Range("A2:A1000").AutoFilter Field:=1, Criteria1:=kaisyamei
>
>の領域設定ですが、上記の方法ではAutoFilterメソッドが実行出来ないとエラーが出てしまいます。
>
>A列のみの選択では無く、全領域を選択すればプログラムは動きます。

ごめん。
>Worksheets("名刺情報").Range("A2:A1000").AutoFilter Field:=1, Criteria1:=kaisyamei


Worksheets("名刺情報").Range("A1:A1000").AutoFilter Field:=1, Criteria1:=kaisyamei

のまちがいです。 ("A2:A1000" A2 ではなく A1、":"(全角) ではなく ":"(半角) )
それで、どのようなエラーになるのですか?
というか、
> AutoFilterメソッドが実行出来ない
とはどのような状況でしょうか?

基本的に、A列データ範囲だけをAutoFilterするのと、表領域全体をAutoFilterするのと、
どちらも フィルタかける範囲は A列ですので (Field:=1, Criteria1:=kaisyamei )
ちがいはないと認識しています。
結果も、表範囲だけが非表示になるのでなく、行全体が非表示になるのですから、そこも
変わりは無いと思いますけど?
・ツリー全体表示

【76660】Re:アクティブセルで読み込んだ値であい...
お礼  さとちぃ  - 15/2/24(火) 16:17 -

引用なし
パスワード
   Kanabun様

さとちぃです。
ありがとうございました。一部変更して、無事動くことを確認しました。

ただ、一点理解できないところがありまして、

Worksheets("名刺情報").Range("A2:A1000").AutoFilter Field:=1, Criteria1:=kaisyamei

の領域設定ですが、上記の方法ではAutoFilterメソッドが実行出来ないとエラーが出てしまいます。

A列のみの選択では無く、全領域を選択すればプログラムは動きます。
エラーが出るのは、私の環境がおかしいからでしょうか?
・ツリー全体表示

【76659】条件別で選択するシートを変え、シートの...
質問  さとちぃ  - 15/2/24(火) 16:14 -

引用なし
パスワード
   VBA初心者です。
以下のような内容を実行したいのですが、プログラム作成に苦戦しております。

シート名”会社情報一覧”のシートにて、検索したい会社名を選択、マクロの実行ボタンを
押すと、会社名の載っている別のシートを選択し、そこで検索をかけ、ヒットしたセルに
色を付ける。


シート名”会社情報一覧”

  A        B        C         D         E
1 会社名    リンク      Aグループ企業  Bグループ企業  Cグループ企業
2 ZF株式会社 マクロを実行する   ○
        リンクボタン
3 XYZ株式会社 マクロを実行する            ○
        リンクボタン


上の表の意味として、ZF株式会社の情報は、シート名”Aグループ企業”に載っているということです。
そのため、Aグループ企業のシートに飛んで、その中にあるZF株式会社のセルを探して色を付けるという
作業になります。


Sub オールラウンド拠点情報からのSC情報検索()
  Dim Target As String    '文字列を表示する引数Targetを宣言
  Dim FoundCell As Range   '文字列を表示する引数FoundCellを宣言
  Dim SearchArea As Range  '文字列を表示する引数SearchAreaを宣言
  Dim Addr As String
  Dim FoundAddr() As String
  Dim i As Long
  
  Target = ActiveCell
  If Target = "False" Then Exit Sub 'もしも入力した文字がない場合は、プログラムを終了
   
  For i = 2 To Cells(Rows.Count, 1).End(xlUp).Row

  If Cells(i, 3) = "○"
  Worksheets("Aグループ企業").Select
  End If
  
  If Cells(i, 4) = "○"
  Worksheets("Bグループ企業").Select
  End If

  If Cells(i, 5) = "○"
  Worksheets("Cグループ企業").Select
  End If

  Set SearchArea = ActiveSheet.UsedRange
  
  Set FoundCell = SearchArea.Find(what:=Target, LookIn:=xlValues, _
          LookAt:=xlPart, MatchCase:=False, MatchByte:=False)
  If FoundCell Is Nothing Then Exit Sub
  Addr = FoundCell.Address
  
  Do
    ReDim Preserve FoundAddr(i) '配列の内容を維持したまま再宣言
    FoundAddr(i) = FoundCell.Address '検索結果のアドレスを配列に格納
    Set FoundCell = SearchArea.FindNext(After:=FoundCell)
    i = i + 1
    If FoundCell Is Nothing Then Exit Do
  Loop Until FoundCell.Address = Addr
  
  '配列に格納されたアドレスをカンマ区切りで結合し、セル範囲を一括選択
  Range(Join(FoundAddr, ",")).Select  '---(1)
End Sub
  
・ツリー全体表示

【76658】Re:アクティブセルで読み込んだ値であい...
発言  kanabun  - 15/2/24(火) 12:50 -

引用なし
パスワード
   ▼さとちぃ さん:

>教えていただいた内容を元に、以下のように作成してみましたが、
>
> Worksheets("名刺情報").Range("A2:A1000").AutoFilter Field:=1, Criteria1:="*kaisyamei*"
>
>の部分で、
>
>実行時エラー1004 RangeクラスのAutofilterメソッドが失敗しました
>
>との結果がきました。

> Criteria1:="*kaisyamei*"

kaisyamei は変数なのだから、それに * を付けて " "で囲っても、だめです。

Sub オールラウンド拠点情報からの名刺情報検索()
  Dim kaisyamei As String' Range
  kaisyamei = "*" & ActiveCell.Value & "*"

  Worksheets("名刺情報").Range("A2:A1000").AutoFilter _
    Field:=1, Criteria1:=kaisyamei
End Sub
・ツリー全体表示

【76657】Re:複数のシートの転記について
お礼  ももかん E-MAIL  - 15/2/24(火) 12:09 -

引用なし
パスワード
   >マナ様
>β様

ご教授ありがとうございました。
こんなに短いコードで出来てしまうとは…脱帽です
自分で考えてたコードは恥ずかしいくらいに長くてぐちゃぐちゃでした…

実装したいファイルは提示したデータよりも
行も列も多いのでこれを自分でアレンジしてみたいと思います。

本当にありがとうございました。
これからも頑張りたいと思います。
・ツリー全体表示

【76655】Re:アクティブセルで読み込んだ値であい...
質問  さとちぃ  - 15/2/24(火) 10:47 -

引用なし
パスワード
   KANABUN様

さとちぃです。早速ご回答ありがとうございます。
すみません、私の説明が悪く、再度ご質問させていただきます。

(困っていること)
アクティブセルの値と名刺情報の会社名が全文一致で合う場合は問題ありませんが
”ABC”のみの表記のものがあった場合、つまり部分一致でヒットさせようとする場合
やり方が分からず困っています。

登録されている会社名は、ABCのみでなくいろいろあり、"*ABC*"のみの設定では難しいです。
それでは、一つ一つ設定すれば良いと考えましたが、1000社程度あり、とても無理だと
考えてます。


教えていただいた内容を元に、以下のように作成してみましたが、

Worksheets("名刺情報").Range("A2:A1000").AutoFilter Field:=1, Criteria1:="*kaisyamei*"

の部分で、

実行時エラー1004 RangeクラスのAutofilterメソッドが失敗しました

との結果がきました。


Sub オールラウンド拠点情報からの名刺情報検索()
  Dim kaisyamei As Range
  Dim N As Long
  Dim i As Worksheet
  Set kaisyamei = ActiveCell
  Worksheets("名刺情報").Select
  If N = InStr(ActiveCell, " ") Then
  Worksheets("名刺情報").Range("A2:A1000").AutoFilter Field:=1, Criteria1:="*kaisyamei*"
  End If
  End Sub

大変申し訳ありませんが、教えていただけませんでしょうか?

また、AutoFilterではなく配列等別の方法で同様の操作が可能であれば、おしえていただけませんでしょうか?
・ツリー全体表示

【76654】Re:アクティブセルで読み込んだ値であい...
発言  kanabun  - 15/2/24(火) 10:25 -

引用なし
パスワード
   フィルター範囲は、
2行目データ範囲からでなく、列見出し行も含めて 最終行までを
指定してください。

Worksheets("名刺情報").Range("A1:E26").AutoFilter Field:=1, Criteria1:="*ABC*"

Worksheets("名刺情報").Range("A1:A26").AutoFilter 1, Criteria1:="*ABC*"

↑はOKですけど、

↓これはよくないです。
Worksheets("名刺情報").Range("A2").AutoFilter Field:=1, Criteria1:="*ABC"
・ツリー全体表示

288 / 3841 ページ ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free