Excel VBA質問箱 IV

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

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


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

【77922】Re:検索
回答  γ  - 16/2/7(日) 11:24 -

引用なし
パスワード
   横から失礼します。

Findメソッドの利用を薦められたのですから、
"Excel Findメソッド" 
などでネット検索すれば、お望みのコード例が見つかりませんか?

例えば、最初に出てくる
ht tps://www.moug.net/tech/exvba/0050116.html
などはどうですか?
・ツリー全体表示

【77921】Re:検索
お礼  佐藤  - 16/2/7(日) 10:11 -

引用なし
パスワード
   ご教授ありがとうございます。
 
・ツリー全体表示

【77920】Re:検索
質問  佐藤  - 16/2/7(日) 10:08 -

引用なし
パスワード
   ご教授ありがとうございます。
 条件1と条件2はクリアーできたのですが、
条件3がどうしてもクリアーできません。
以下に作ったコードのどこに付け加えたらよろしいのでしょうか?
具体的にコードを入力していただけないでしょうか?

 Private Sub CommandButton1_Click()
     Dim sh As Object
     Dim myCnt As Integer
     Dim AllSu As Integer
     Dim target As Variant
     '<検索結果保管先を初期化します。>
      AllSu = 0
     '<検索する文字列を指定する入力用のダイアログボックスを表示
     します。>
    target = Application.InputBox(Prompt:="検索する文字を入力
    して下  さい。")
     '<キャンセルか未入力ではなかったら検索します。>
     If target <> False And target <> "" Then '
     '<対象のシートを対象に検索を行います。>
      For Each sh In ActiveWindow.SelectedSheets
     '<使われているセル範囲に含まれるセルのうち、
     '検索条件に一致するセルの個数を取得します。>
    myCnt = WorksheetFunction.CountIf(sh.UsedRange, target) '
    '<検索条件に一致したセルの個数をカウントします。>
    AllSu = AllSu + myCnt
    Next sh
    '<全てのシートの検索が終わったら、結果を表示します。>
      If AllSu = 0 Then
        MsgBox target & "は見つかりませんでした。"
       Else
       MsgBox target & "は" & AllSu & "個あります。"
       End If
     End If
  End Sub

以上 よろしくお願いします。
・ツリー全体表示

【77919】Re:検索
発言  ichinose  - 16/2/6(土) 16:47 -

引用なし
パスワード
   ▼佐藤 さん:
>エクセルvbaの初心者です。
>vbaで検索を行いたいのですが、なかなかうまくできません。
>どなたかくわしい方、教えていただけないでしょうか?
> ただ、検索には以下のような条件があります。
Excelには、検索という機能がありますよね?
これの亜種版ですね!!


>  条件1 ワークシート内で検索を行う
RangeオブジェクトにFindメソッド(FindNextメソッドとの組合せ)
を調べてください。二つのメソッドの共演コードなら、ごろごろしています。
入力データ  検索セル範囲
         検索文字列

出力データ  検索した結果、見つかったセル範囲

>  条件2 検索対象をを対話式(メッセージボックス)で行う
  検索文字列の入力は、ApplicationオブジェクトのInputboxメソッドを調べてください。

>  条件3 検索でヒットしたセルを色(ピンク)で塗りつぶす
   将来的には、ピンクだけでなく色も自由に選べるようにすると便利そうですが、 セルに色を付けるのは、マクロの記録を使えば、容易にコードは生成されます

以上です。
・ツリー全体表示

【77918】Re:検索
発言  マナ  - 16/2/6(土) 16:39 -

引用なし
パスワード
   ▼佐藤 さん:
ここらを参考に試してみてはどうでしょうか。
ht tp://excelwork.info/excel/cellreplacereplaceformat/
ht tp://www.moug.net/tech/exvba/0010014.html
・ツリー全体表示

【77917】検索
質問  佐藤  - 16/2/6(土) 14:22 -

引用なし
パスワード
   エクセルvbaの初心者です。
vbaで検索を行いたいのですが、なかなかうまくできません。
どなたかくわしい方、教えていただけないでしょうか?
 ただ、検索には以下のような条件があります。
  条件1 ワークシート内で検索を行う
  条件2 検索対象をを対話式(メッセージボックス)で行う
  条件3 検索でヒットしたセルを色(ピンク)で塗りつぶす

以上よろしくお願い申し上げます。
・ツリー全体表示

【77916】Re:選択セルをコピペ、印刷、コピーした...
発言  マナ  - 16/2/5(金) 23:44 -

引用なし
パスワード
   Sub test()
  Dim i As Long
  
  For i = 0 To 5
    Range("d1:f1").Value = Range("a1:c1").Offset(i).Value
    Range("d1:f1").PrintPreview
  Next
  
End Sub
・ツリー全体表示

【77915】選択セルをコピペ、印刷、コピーしたセル...
質問  [名前なし]  - 16/2/4(木) 22:07 -

引用なし
パスワード
   こんばんは。
過去ログは拝見しましたが至らないところがあればご指摘ください。

やりたいことを説明しますと、「Aからcの行まで縦に入力された一覧表を一列ずつD1〜F1に貼り付け、印刷した後次のセルを選択」です。

selection.resize(,selection.rows.count+2).select
selection.copy
range(D1).select
activesheet.paste
(ここにクイック印刷のマクロ)
selection.offset(1,-3).select

まではなんとか出来たのですが、1列目&#10145;2列目までのあと3,4…と続いてくれません。

お詳しい方いらっしゃいましたらどうぞご教授下さい。
よろしくおねがいします。
・ツリー全体表示

【77914】Re:複数有る検索結果の横方向への表示方...
お礼  laihu  - 16/2/4(木) 11:59 -

引用なし
パスワード
   ▼β さん:
早速試してみました。意図通りの結果が出ました。完璧です!
聞いてみるものですね。

自分でも理解できる様、これから勉強していきたいと思います。
今後とも宜しくお願い致します。

>▼laihu さん:
>
>関数は独覚さんにおまかせし、VBA処理の一案です。
>
>Sub Test()
>  Dim dic As Object
>  Dim c As Range
>  
>  Set dic = CreateObject("Scripting.Dictionary")
>  Application.ScreenUpdating = False
>  
>  With Sheets("Sheet1")
>    For Each c In .Range("A2", .Range("A" & Rows.Count).End(xlUp))
>      If Not dic.exists(c.Value) Then Set dic(c.Value) = CreateObject("Scripting.Dictionary")
>      dic(c.Value)(dic(c.Value).Count) = c.Offset(, 1).Value
>    Next
>  End With
>  
>  With Sheets("Sheet2")
>    .Range("A1", .UsedRange).Offset(1, 4).ClearContents
>    For Each c In .Range("D2", .Range("D" & Rows.Count).End(xlUp))
>      If dic.exists(c.Value) Then c.Offset(, 1).Resize(, dic(c.Value).Count).Value = dic(c.Value).items
>    Next
>    .Select
>  End With
>  
>End Sub
・ツリー全体表示

【77913】Re:複数有る検索結果の横方向への表示方...
発言  β  - 16/2/4(木) 10:14 -

引用なし
パスワード
   ▼laihu さん:

関数は独覚さんにおまかせし、VBA処理の一案です。

Sub Test()
  Dim dic As Object
  Dim c As Range
  
  Set dic = CreateObject("Scripting.Dictionary")
  Application.ScreenUpdating = False
  
  With Sheets("Sheet1")
    For Each c In .Range("A2", .Range("A" & Rows.Count).End(xlUp))
      If Not dic.exists(c.Value) Then Set dic(c.Value) = CreateObject("Scripting.Dictionary")
      dic(c.Value)(dic(c.Value).Count) = c.Offset(, 1).Value
    Next
  End With
  
  With Sheets("Sheet2")
    .Range("A1", .UsedRange).Offset(1, 4).ClearContents
    For Each c In .Range("D2", .Range("D" & Rows.Count).End(xlUp))
      If dic.exists(c.Value) Then c.Offset(, 1).Resize(, dic(c.Value).Count).Value = dic(c.Value).items
    Next
    .Select
  End With
  
End Sub
・ツリー全体表示

【77911】Re:複数有る検索結果の横方向への表示方...
回答  laihu  - 16/2/4(木) 7:55 -

引用なし
パスワード
   ワークシート関数で現在使用しておりますが、実際は行数が非常に多く、いちいち再計算にかなりの時間がかかります。
VBAであればそれを最小限に抑えることができるだろうと思っています。

因みに今は下記のような数式をSheet2の各セルに入れています。
もっと簡単な数式があれば是非教えてください。

<数式>(下記はSheet2のE2に入る数式です。)
{=IF($D2="","",IF(COUNTIF(Sheet1!$A:$A,$D2)<COLUMN(A1),"",INDEX(Sheet1!$B:$B,SMALL(IF(Sheet1!$A:$A=$D2,ROW($D:$D)),COLUMN(A1)))))}
・ツリー全体表示

【77910】Re:複数有る検索結果の横方向への表示方...
発言  独覚  - 16/2/3(水) 9:52 -

引用なし
パスワード
   ▼laihu さん:
ワークシート関数で行う方法もありますがマクロのほうがいいでしょうか?
・ツリー全体表示

【77909】複数有る検索結果の横方向への表示方法に...
質問  laihu  - 16/2/3(水) 9:41 -

引用なし
パスワード
   こんにちは。
VBA初心者で自分なりに何度も試みているのですが
なかなかうまくいかないので教えて頂ければ幸いです。

Sheet1のA列(重複有り)の内、Sheet2のD列(重複無し)と値が一致するものを検索し、sheet1で値が一致した全ての行のB列の値を、順にSheet2の該当する行の、
E,F,G列に横方向に代入していくというものです。

言葉では説明しにくいので、下記のようなイメージでご理解頂けるでしょうか?
-----------------------------------------------------------------------
【マクロ実行前】
-----------------------------------------------------------------------
<Sheet1>

(A)  B   C   D   E
 イ  あ
 ロ  い
 イ  う
 ニ  え
 イ  お
-----------------------------------------------------------------------
<Sheet2>

A  B   C   (D)  E   F   G
          イ 
           ロ 
          ハ
          ニ 
          ホ
------------------------------------------------------------------------
【マクロ実行後】
-----------------------------------------------------------------------
<Sheet2>

A  B   C  (D)  E   F   G
          イ  あ  う  お
           ロ  い
          ハ
          ニ  え
          ホ
------------------------------------------------------------------------

Sheet1のA列、Sheet2のD列は毎回行数が変化するのでxlUpを使った変数として扱い、sheet2のE、F、G列についてはMAX3列ですので、変数を5to7とし、自分なりに作ってみたのですが、変数と繰り返し処理の指示に不慣れでうまくいきません。

説明不足な部分もあるかと思いますが、教えて頂ければとても助かります。
・ツリー全体表示

【77908】Re:文字列の一括返還について
発言  独覚  - 16/2/2(火) 13:33 -

引用なし
パスワード
   >仮に他のサイトで解決したのなら、ここにも必ずその顛末を書いてください。質問しっぱなし、というのはモラルに反します。「解決したからいいや」というのではありません。
に従ってどうやって解決したかの報告をこことエクセルの学校(いまだにほったらかし)
へもお願いいたします。

単にどこそこで解決した、は報告になりませんので。
・ツリー全体表示

【77907】Re:文字列の一括返還について
お礼  タークン E-MAIL  - 16/2/2(火) 12:13 -

引用なし
パスワード
   おっしゃられる通りです。
このまま、残させていただきます。

ご指導ありがとうございました。
・ツリー全体表示

【77906】Re:文字列の一括返還について
発言  マルチネス  - 16/2/1(月) 20:05 -

引用なし
パスワード
   レスが付いてるのに削除するとはいかがなものか?と思います。
回答者に対して非常に失礼です。
・ツリー全体表示

【77905】Re:実行時エラー1004について
お礼  tetsu  - 16/2/1(月) 18:45 -

引用なし
パスワード
   ▼ichinose さん:
>▼tetsu さん:
>>こんにちは。
>>「実行時エラー1004 OLEObjectメソッドは失敗しました。Wooksheetオブジェクト」
>>
>>下記のソースの3行目でエラーになります。
>
>
>>  For Each mySheet In Worksheets
>>    For i = 1 To 4
>>      With mySheet.OLEObjects("ComboBox" & i).Object
>>        .AddItem "りんご"
>>        .AddItem "みかん"
>>        .AddItem "ばなな"
>>        .AddItem "オレンジ"
>>        .AddItem "パイン"
>>        .AddItem "ブドウ"
>>      End With
>>    Next i
>>  Next
>
>
>>ワークシート上に4つのコンボボックスをおいて、全て同じ選択肢を設定する処理です。
>
>対象ブックにあるワークシートすべてが対象だという事は 認識されていますか?
>
>新規にワークシートだけを作成し、上記のコードを実行すると
>提示されたようなエラーが発生します
>(もっともmySheetという変数をどのように定義されているかにも依りますが)。
>
>
>この辺りの確認はいかがですか?

お返事ありがとうございました。
まさしく、別の処理のためにコンボボックスがないシートを入れていました。
そのシートにダミーのコンボボックスを置いたら、現象は発生しなくなりました。お礼が遅くなり、すみませんでした。
・ツリー全体表示

【77904】Re:文字列の一括返還について
お礼  タークン E-MAIL  - 16/2/1(月) 10:45 -

引用なし
パスワード
   完璧でした
ありがとうございます。

今、スレッドを削除の仕方を探しています。
・ツリー全体表示

【77903】Re:文字列の一括返還について
発言  β  - 16/1/30(土) 17:36 -

引用なし
パスワード
   ▼タークン さん:

あちらに回答を入れておきましたが、それでは要件を満たさなかったということでしょうか?

なお、質問箱IVはマルチポストは許容していますが、以下のようなルールがあります。
また、あちらはマルチポスト禁止の板です。

マルチポストについて
別のサイト(掲示板)にまったく同じ目的の投稿をすることを、一般に「マルチポスト」といいます。当質問箱では、マルチポストは原則認めています。つまり、ほかのサイトで質問したことをこのサイトで質問してもかまわないということです。

しかし、もしマルチポストをするのなら、可能な限り「○○にも同じ質問を出しました」ということを宣言してください。そして、仮に他のサイトで解決したのなら、ここにも必ずその顛末を書いてください。質問しっぱなし、というのはモラルに反します。「解決したからいいや」というのではありません。

また、マルチポストを明示的に禁止しているサイトとのマルチポストをしてはいけません。
・ツリー全体表示

【77902】Re:実行時エラー1004について
発言  ichinose  - 16/1/30(土) 17:13 -

引用なし
パスワード
   ▼tetsu さん:
>こんにちは。
>「実行時エラー1004 OLEObjectメソッドは失敗しました。Wooksheetオブジェクト」
>
>下記のソースの3行目でエラーになります。


>  For Each mySheet In Worksheets
>    For i = 1 To 4
>      With mySheet.OLEObjects("ComboBox" & i).Object
>        .AddItem "りんご"
>        .AddItem "みかん"
>        .AddItem "ばなな"
>        .AddItem "オレンジ"
>        .AddItem "パイン"
>        .AddItem "ブドウ"
>      End With
>    Next i
>  Next


>ワークシート上に4つのコンボボックスをおいて、全て同じ選択肢を設定する処理です。

対象ブックにあるワークシートすべてが対象だという事は 認識されていますか?

新規にワークシートだけを作成し、上記のコードを実行すると
提示されたようなエラーが発生します
(もっともmySheetという変数をどのように定義されているかにも依りますが)。


この辺りの確認はいかがですか?
・ツリー全体表示

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