すぐマク Excel VBA Board

34249
Excel VBA FAQ 掲示板
画像クリックで拡大。レスのついた質問は削除しない。回答には返礼を!
お名前
件名
メッセージ
画像
メールアドレス
ホームページ
文字色
編集/削除キー (半角英数字のみで4〜8文字)
プレビューする (投稿前に、内容をプレビューして確認できます)

検索機能の構築 - nrp

2009/11/20 (Fri) 15:42:48

初めまして。ご多忙のところ大変恐縮ながら質問させていただきたいことがあります。
現在、顧客管理表を作成しているのですが、ユーザーフォームを利用して検索機能を作成しようと思っています。

現在sheet1に顧客管理表を作成してB列が顧客番号列、B5を起点としてO列まで名前や住所などの情報を入力したものとなっています。

さて、本題なのですが・・
ユーザーフォームにテキストボックスと”検索”ボタンを設置してテキストボックスにキーワードを入力して検索ボタンを押すと検索値に該当する行(顧客)のみを抽出するマクロを作成したいのですがどのようにしたら良いでしょうか?

ちなみにこの検索のユーザーフォームを呼び出すマクロまでは出来ています。

お暇な時で構いませんので教えていただけたらと思います。長文失礼しました。

Re: 検索機能の構築 - 永井善王 Home

2009/11/20 (Fri) 17:24:03

下記ページを参考にされ、分からない点を絞り込んで、それを再質問されると良いと思います。

データーベースに検索機能をつけるには?
http://www.asahi-net.or.jp/~zh3y-ngi/YNxv98224.html

ありがとうございました - nrp

2009/11/21 (Sat) 14:51:53

まず返事が遅れてしまったこと、並びに不十分な説明の質問であったことお詫び申し上げます。

早速上記のページを参考にし、なんとか自力で満足のいくマクロを構築することが出来ました。

これからも参考にさせて頂きます。
ありがとうございました。それでは失礼します。

コピー貼り付けの連続処理 - ウ・コ

2009/11/20 (Fri) 09:09:15

はじめまして、過去のFAQ 「月別フォルダのブックを順に開いて一覧表を作成するには?」
http://www.asahi-net.or.jp/~zn3y-ngi/YNxv9292.html
を見たのですが、私がしたい事と少し違うようなので教えて頂ければ有りがたいです。
私がしたい事
・ファイル名が「○○基本計画表」とか「▲▲基本計画表」と複数あり随時増えていく
・別のフォルダーのシートにコピーしたい
理解できなかった点
過去のFAQの回答では、1月から12月のフォルダーを For 月 = 1 to 12  としていましたが私の場合は「○○基本計画表」とか「▲▲基本計画表」と基本計画表以外部分の名前が色々で。
又、コピーして張り付ける際の行を 月+1 と表現していますが、私の場合はどのようにしたらよいのでしょうか?
または、全然違うのでしょうか?

Re: コピー貼り付けの連続処理 - 永井善王 Home

2009/11/20 (Fri) 09:29:01

与件について、補足説明していただけますか。
Q1. 例えば「AA」フォルダの中に、「○○基本計画表.xls」とか、 「▲▲基本計画表.xls」とかのブックがあるが、○○とか▲▲とかのネーミングには規則性がないということですか?
Q2. 「○○基本計画表.xls」とか、 「▲▲基本計画表.xls」とかからコピーするセル範囲は共通と思いますが、B2:C2のように言うと、どうなりますか?
Q3. 貼り付けるシートを例えば「BB」フォルダにある「一覧表.xls」の「Sheet1」とした場合、貼り付けるセルを最初はB2、次はB3、その次はB4のように言うと、どうなりますか?

リンクの更新が先に・・・ - nr

2009/11/13 (Fri) 21:30:06

初めまして
マクロを始めたばかりの者です。

エクセル2003で『マクロを有効にする』のセキュリティー警告メッセージの前に『このブックには、他のデータソースへのリンクが含まれています。』が表示されてしまい、マクロを有効に出来ません。
解決方法があれば教えて下さい。

宜しくお願いします。

Re: リンクの更新が先に・・・ - 永井善王 Home

2009/11/14 (Sat) 08:50:49

[セキュリティ レベル]の [低(L)]以外のオプションボタンがオンになっておれば、真っ先にセキュリティー警告メッセージが表示されるはずです。
Excel2003を立ち上げて、右図 (クリックで拡大可能) のように設定してあるか、再確認してみましょう。 … [ツール(T)]-[マクロ(M)]-[セキュリティ(S)]

ありがとうございました。 - nr

2009/11/14 (Sat) 15:36:03

早速ご回答いただきありがとうございました。
貴殿の本を参考に勉強しますので
今後とも宜しくお願い致します。

データの貼り付け - もんた

2009/11/09 (Mon) 19:21:11

リストから順番にデータを選択し、その計算結果が出てくるセルを別シートの表に貼り付けを行いたいのですが、どのようにすればよいのでしょうか?
現在は、以下のようなマクロをリストの数だけ作成して使用しているのですが…
ご教授お願いいたします。

Sub Macro2()
Sheets("シート1").Select
Range("B5").Select   'ここをB5〜B200のように変化させています
Selection.Copy
Range("M2").Select    'ここのセルを計算式に対応させています
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("Z39:BF39").Select   '計算結果が出てくるセルの範囲です
Application.CutCopyMode = False
Selection.Copy
Sheets("シート2").Select
Range("Y21").Select     'ここの範囲をY21からY216のように変化させています
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
End Sub

Re: データの貼り付け - Yoshioh Nagai Home

2009/11/10 (Tue) 16:23:31

繰り返し処理すればいいと思います。わかりやすいFor...Next文を使うと、たとえば、下記のようです。

Sub Macro2()
For 行 = 5 To 200
Sheets("シート1").Select
Range("B" & 行).Select 'ここはB5〜B200に変化する
Selection.Copy
Range("M2").Select 'ここのセルを計算式に対応させています
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("Z39:BF39").Select '計算結果が出てくるセルの範囲です
Application.CutCopyMode = False
Selection.Copy
Sheets("シート2").Select
Range("Y" & 行 + 16).Select 'ここの範囲はY21からY216に変化する
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Next
End Sub

有難う御座います - もんた

2009/11/10 (Tue) 20:47:43

早速のご教授有難う御座います。
希望通りの動作しております。
まだまだ勉強中の身です。
これからも宜しくお願いします。

キーワードで抽出した結果をリストボックスへ表示したい - MN

2009/10/07 (Wed) 20:57:55

500連発第2弾の396を利用し、必要なデータ(3列 コードと会社名と部署名)をリストボックス上に表示し、1件のみ・選択した複数データ・選択した連続データの抽出が出来、VBAが完成しました。ところが、使用者側から、リストボックスの内容をキーワードで検索し、抽出できないか?
例 「東京」キーワードを入力して、会社名と部署名に「東京」というキーワードがあったら、リストボックス表示を再表示して、選択し抽出する。
先生のHP上でもこのような例がなく、シート上にあるキーワードと一致しする検索照会は出来るのを確認できましたが、リストボックスに表示した内容をキーワードで検索できないものでしょうか?

Re: キーワードで抽出した結果をリストボックスへ表示したい - 永井善王 Home

2009/10/08 (Thu) 07:21:30

500連発第2弾396番をマスターできてよかったですね。
ところで、
Q1. 「東京」キーワードはどこへ入力するのですか、テキストボックスですか?
Q2. 「シート上にあるキーワードと一致する検索」とありますが、オートフィルタで抽出ですね?
Q3. オートフィルタでの抽出結果を別のシートへコピー貼り付けできますね?
以上により、貼り付けたシートからリストボックスへ表示すれば完成すると思いますよ。
トライしてみて分からない点が出たら、再質問されることをお勧めします。

Re: キーワードで抽出した結果をリストボックスへ表示したい - MN Home

2009/10/08 (Thu) 17:34:14

早速の回答ありがとう御座いました。言葉使いが誤っていました。キーワードと一致と言いましたが、そのキーワードを含むでした。500連発第2弾396番では、オプションボタンで抽出条件を分けていますので、4個目にオプションボタン・テキストボックス・コマンドボタンを各1個追加します。4個目のオプションボタンを選択し、テキストボックスにキーワードを入力し、コマンドボタンを押す。(画像見本参照)すると、キーワードに一致したデータがリストボックスに再表示され、その中から、必要なデータを選択する。
Q1はテキストボックスに入力します。
Q2はオートフィルタでは無く、一般的な検索です。指定したキーワードが含まれていれば良い
Q3画像見本では、キーワードを「東京」を入力した場合、会社名(2列目)にある東京と部署名(3列目)にある東京のデータのみ再表示する。
オートフィルタだとキーワードの指定が出来ないので。返答を記述中に、今回の4番目の抽出は、396番の方式と切り離した方が良いかな?。データの選択を同じ画面で出来る方がベターですが、処理が
複雑になりそうで、それならば、分離して処理した方が良いと思いました。勉強になりありがとうございました。

よかったですね - 永井善王 Home

2009/10/08 (Thu) 17:41:27

自己解決されたようで、よかったですね。 では、これで失礼します。

メモリー不足となってしまいます まな

2009/10/06 (Tue) 15:09:43

お世話になります
ちまちまとマクロを勉強しながらやっていますがマクロを実行するとメモリー不足となってしまいました 解除方法があったら教えてください。

ファイルはxlsm形式で保存
オプションボタンでチェックした項目をセルに入力しています。

Private Sub OptionButton1_Click()
ActiveCell.FormulaR1C1 = "m"
End Sub

Private Sub OptionButton2_Click()
ActiveCell.FormulaR1C1 = "?"
End Sub

Private Sub OptionButton3_Click()
ActiveCell.FormulaR1C1 = "m3"
End Sub

Private Sub OptionButton4_Click()
ActiveCell.FormulaR1C1 = "枚"
End Sub

Private Sub OptionButton5_Click()
ActiveCell.FormulaR1C1 = "回"
End Sub

Private Sub OptionButton6_Click()
ActiveCell.FormulaR1C1 = "箇所"
End Sub

Private Sub OptionButton7_Click()
ActiveCell.FormulaR1C1 = "本"
End Sub

Private Sub OptionButton8_Click()
ActiveCell.FormulaR1C1 = "袋"
End Sub

Private Sub OptionButton9_Click()
ActiveCell.FormulaR1C1 = "t"
End Sub

Private Sub OptionButton10_Click()
ActiveCell.FormulaR1C1 = "?"
End Sub

Private Sub OptionButton11_Click()
ActiveCell.FormulaR1C1 = "個"
End Sub

Private Sub OptionButton12_Click()
ActiveCell.FormulaR1C1 = "台"
End Sub

Private Sub OptionButton13_Click()
ActiveCell.FormulaR1C1 = "式"
End Sub

Private Sub OptionButton14_Click()
ActiveCell.FormulaR1C1 = "〃"
End Sub

実行するとセルに値は入るのですがメモリー不足ですとなってしまいます。
解決方法をお願いします。

Re: メモリー不足となってしまいます - 永井善王 Home

2009/10/06 (Tue) 17:31:10

メモリ不足になるのは、マクロのどの行ですか?

Re: メモリー不足となってしまいます まな

2009/10/07 (Wed) 15:01:23

すべてユーザーフォームから入力すると出てしまいます。
マクロの記述がおかしいのですか?

Re: メモリー不足となってしまいます - 永井善王 Home

2009/10/07 (Wed) 19:55:08

「すべてユーザーフォームから入力すると出てしまいます。」ということであるなら、たとえばオブションボタン1をクリックしたときにアクティブセルが「m」にならないでメモリ不足になってしまうということですね。
どんなブックのどんなシートで、どんなマクロか、全容を示された方が解決に近付けると思いますよ。

ありがとうございました まな

2009/10/08 (Thu) 14:45:28

いろいろと試してみたらなぜかメモリー不足が出なくなりました。
どこが悪かったのかは理解できてないですが何とかなりました ありがとうございます。

次のworkdayの日にちに置き換えるvba - ゆき

2009/09/04 (Fri) 10:55:30

ある日付がworkdayかどうか見極め、土日祝日であれば、次のworkdayの日にちに置き換えるvbaを知りたいです。
Excel2000を使っています。よろしくおねがいします。

workdayとは? - 永井善王 Home

2009/09/04 (Fri) 11:14:14

「workday」 とは、一般的には 「仕事日、 就業日、 平日」のこと (プログレッシブ英和中辞典) のようですが、あなたの定義はこれとは違うのですか?
「ある日付がworkdayかどうか見極め」とありますが、日本語で言うとどうなりますか。
もしかして、WORKDAY関数を知ってみえて、それをVBAで使う方法を尋ねてみえるのですか?

Re: 次のworkdayの日にちに置き換えるvba - ゆき

2009/09/04 (Fri) 12:57:42

お返事ありがとうございます。
分かりずらい質問ですみません。

あるデータの中に2009.9.22という日付があったら、この日は日本の休日になるので、翌平日である2009.9.24に置き換える。というVBAを教えていただきたく質問しました。
よろしくお願いいたします。

Re: 次のworkdayの日にちに置き換えるvba - 永井善王 Home

2009/09/04 (Fri) 18:31:16

WORKDAY関数は、指定した日付から土曜、日曜を除いた日数分あとの日付を求めることができます。(祝日の調整も可能)
しかし、この関数を利用するにはアドインの「分析ツール」を設定しなければなりません。詳細は下記ページを参照されるとよいと思います。
・WORKDAY関数の使い方(指定した稼働日数後の日付を求める関数) http://maglog.jp/excel/Article274171.html
・EXCEL VBAでWORKDAY関数を使用したい http://oshiete1.goo.ne.jp/qa1810554.html
頑張ってください。

Re: 次のworkdayの日にちに置き換えるvba - ゆき

2009/09/08 (Tue) 11:11:29

サイトの添付、どうもありがとうございました。
チャレンジしてみます。
また分からなかったら質問すると思いますが、その際はよろしくおねがいします。
まずはお礼まで。

ありがとうございました - ゆき

2009/09/29 (Tue) 11:26:17

お返事遅くなりすみません。
添付していただいたサイトを参考にし、VBA作成できました。
どうもありがとうございました!

株価自動記録 loswel2

2009/09/27 (Sun) 00:26:02

こんにちはVBA初心者ですが、株価を一分毎に
WEBクエリーで取得しシートに貼り付け、さらに一時間毎に四本値をエクセルで自動作成するマクロを組みたいのですが、一分毎の貼り付けは問題なく動きますが、60回カウント後、一時間毎の処理をするGoSUBへどうしてもうまく飛んでいってくれません。
どこが悪いのでしょうか、どなたかご教授願えないでしょうか。よろしくお願いします。


Sub 自動記録1()
Dim counter

Application.OnTime Now + TimeValue("00:01:00"), "自動記録1" '一分毎に自動記録1を実行


If counter >= 60 Then GoSub time1 Else: counter = counter + 1

Worksheets("一分値").Activate '一分値をアクティブにする ※1
Range("b3:d61").Copy 'コピーする ※2
Range("b2").Select '貼り付け先のセル範囲を選択する ※3
ActiveSheet.Paste '現在の選択範囲に貼り付ける


Range("b64:c64").Copy 'コピーする ※2
Range("b61").Select '貼り付け先のセル範囲を選択する ※3
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone



Exit Sub

time1:
                '一時間毎に時間値をコピーする

Worksheets("一時間値").Activate '一時間値をアクティブにする ※1
Range("b3:f61").Copy 'コピーする ※2
Range("b2").Select '貼り付け先のセル範囲を選択する ※3
ActiveSheet.Paste '現在の選択範囲に貼り付ける


Range("b65:f65").Copy 'コピーする ※2
Range("b61").Select '貼り付け先のセル範囲を選択する ※3
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone

counter = 0

Worksheets("一分値").Activate '一分値をアクティブにする

Return

End Sub

Re: 株価自動記録 - 永井善王 Home

2009/09/27 (Sun) 07:47:53

詳しくは見てありませんが、下記2カ所を修正すると、どうなりますか。

・ 2行目の Dim counter を削除するか、Sub 自動記録1() の行よりも上の行に変更する
・ 4行目の If counter >= 60 Then GoSub time1 Else: counter = counter + 1 を
  If counter >= 60 Then GoSub time1 Else counter = counter + 1 に変更する
  (コロンを削除する)

ありがとうございました loswel2

2009/09/27 (Sun) 13:00:12

ご指摘の2点を修正したら見事に飛んでいってくれました!
感謝感謝!!ありがとうございました!
まだまだVBA初心者ですが今後ともよろしくお願いいたします。

VBA自動実行 - ミルトン

2009/08/16 (Sun) 17:59:42

はじめまして。
ホームページに似たような質問があったのですが、応用が出来ずに困っています。
このページの質問です。(http://www.asahi-net.or.jp/~ZN3Y-NGI/YNxv9c7.html)

このページの質問は特定のセルに特定の値が入力されたときだと思うのですが、
特定のセルに何らかの値が入力された時、プロシージャを実行するにはどうしたらよいのでしょうか。

さらに私がやりたいのは、
セルA1に入力ーーーー>プロシージャAを実行
セルB2に入力ーーーー>プロシージャBを実行
       ・
       ・
       ・
のようにしたいのです。

お手数ですが回答よろしくお願いします。

Re: VBA自動実行 - 永井善王 Home

2009/08/16 (Sun) 18:29:59

ご自分でどこまで出来たのかを示された方が良いと思います。
でないと丸投げ質問になってしまいますよ。

Re: VBA自動実行 - ミルトン

2009/08/16 (Sun) 19:08:15

失礼いたしました。とりあえず作ってみたのですが

Private Sub Worksheet_Change(ByVal Target As Range)
   If Target.Column = 3 And Target.Row = 51 Then
   EXC1
   End If

   If Target.Column = 3 And Target.Row = 59 Then
   EXC12
   End If
   ・
   ・(あとは上記と同じような感じです。)
   ・
End Sub
と作りました。

指定しているセルに値を入力しても何の変化も起きませんでした。

Re: VBA自動実行 - 永井善王 Home

2009/08/17 (Mon) 07:25:29

提示されたマクロはワークシートのコード画面に作成してありますね。 新しいブックに下記マクロを作成して、C51セルとC59セルで試すと、どうなりますか?
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 3 And Target.Row = 51 Then
MsgBox Target.Address
End If
If Target.Column = 3 And Target.Row = 59 Then
MsgBox Target.Address
End If
End Sub

ありがとうございました - ミルトン

2009/08/17 (Mon) 18:40:34

$C$51、$C$51と出ます!
ですが、AY3セルの変化で自動実行させたかったので、ColumnとRowが逆だったということですね・・・。
単純なミスで質問してしまい申し訳ありません。

逆にすると自動実行できました。
ありがとうございました。

テキスト書き出し - 鶏肋

2009/08/11 (Tue) 17:21:05

こんにちは。
現在、Excelの各シートのテキストボックス内の文字を書き出し、一覧表にするマクロを作っているのですが、行き詰ってしまったのでご教示お願いいたします。

マクロでは、一番最後にシートを一枚プラスし、そこに各シートのテキストボックス内の文字を書き出しています。(初心者なので構文に無駄が多いかもしれませんが)。

問題なのですが、たとえば以下のようなパターンがあるとします。
?シート1に「報告書」と書かれたテキストボックスが1つある。
?シート1に「報告書」と書かれたテキストボックスが1つと、オートシェイプの矢印が1つある。
?シート1に「報告書」と書かれたテキストボックスが2つと、オートシェイプの矢印が1つある。

?の場合は、一覧にちゃんと「報告書」と書き出されるので問題ありません。
問題は??で、?の場合、一覧には「報告書」と2度書き出されてしまいます。
これを1度にしたいのです。
書き出した後、重複する文字を削除する方法も考えましたが、それでは?に対応できません。
(現時点のマクロでは、?の場合、「報告書」という文字が3回書き出されます。これを2回にしたいです)。

基本的なことかもしれませんが、よくわからないので、よろしくお願いいたします。

私が書いたマクロは以下のとおりです。

Sub TextFrameExport()

Application.ScreenUpdating = False

Worksheets.Add after:=Worksheets(Sheets.Count)

Dim myShname As String
Dim i As Integer
Dim myCount As Integer

myCount = Worksheets.Count - 1


Select Case myCount

Case Is = 1

Worksheets(Sheets.Count).Select
Range("A1").Value = Worksheets(1).Name

Dim myRng As Range
Dim myCell As Range
Dim wsName As String
Dim myShape As Shape
Dim myTxt As String
Dim j As Long

Worksheets(Sheets.Count).Range("A1").Select
Set myRng = Worksheets(Sheets.Count).Range("A1")
For Each myCell In myRng
wsName = myCell.Value
For Each myShape In Worksheets(wsName).Shapes
On Error Resume Next
myTxt = myShape.TextFrame.Characters.Text
On Error GoTo 0

If myTxt <> Empty Then
j = j + 1
myCell.Offset(0, j).Value = myTxt
End If
Next
myTxt = ""
j = 0
Next


Case Else

For i = 1 To myCount
Worksheets(Sheets.Count).Select
Range("A1").Offset(i - 1, 0).Value = Worksheets(i).Name
i = i
Next


Worksheets(Sheets.Count).Range("A1").Select
Set myRng = Worksheets(Sheets.Count).Range(Selection, Selection.End(xlDown))
For Each myCell In myRng
wsName = myCell.Value
For Each myShape In Worksheets(wsName).Shapes
On Error Resume Next
myTxt = myShape.TextFrame.Characters.Text
On Error GoTo 0

If myTxt <> Empty Then
j = j + 1
myCell.Offset(0, j).Value = myTxt
End If
Next
myTxt = ""
j = 0
Next

End Select

Application.ScreenUpdating = True

End Sub

Re: テキスト書き出し - 永井善王 Home

2009/08/12 (Wed) 08:13:54

マクロの下から15行目に For Each myShape In Worksheets(wsName).Shapes があります。
その次へ下記コードを挿入し、図形の種類か名前を判別するようにすれば解決するのではないでしょうか。
If myShape.Type <> msoTextBox Then Exit For または
If Left(myShape.Name, 8) <> "Text Box" Then Exit For
参考ページ … http://www.asahi-net.or.jp/~zn3y-ngi/YNxv212.html#2-1
・指定した種類の図形を削除する
・すべての図形からテキストボックスを見つける

ありがとうございました - 鶏肋

2009/08/13 (Thu) 09:29:13

永井善王様いつもお世話になります。
業務関係上、ご教示いただいたうち、今回は図形の種類を指定する方法を使わせていただきました。
矢印のオートシェイプなどに関わらず、無事にテキストボックスの文字だけ書き出すことができました。
ありがとうございました。


Copyright © 1999- FC2, inc All Rights Reserved.