• 締切済み

EXCEL VBA 日別データを検索しコピー

度々すいません。行き詰まりましたので教えてください。 エクセルSheet2に月の日別のデータがあります。日によってデータの 行数はまちまちですが、A列には日付、B,C,D列には時間、E列には目的等々があります。そのデータをユーザーフォームのスピンボタンで日付を指定し、コマンドボタンをクリックしたら、Sheet1の1日分の表にコピーしたいのです。また指定日がなければメッセージで指定日がありませんと表示したいのです。よろしくお願いします。 excel2003 Private Sub SpinButton1_Change() TextBox1.Value = Date + SpinButton1.Value End Sub Private Sub CommandButton1_Click() '年月日表示 Range("C3") = Format(TextBox1.Value, "yy") Range("D3") = Format(TextBox1.Value, "mm") Range("E3") = Format(TextBox1.Value, "dd") Range("F3") = Format(TextBox1.Value, "aaa")   ここがわかりません   Else MsgBox "指定日がありません" End If End Sub

みんなの回答

回答No.1

'標準モジュールに Type myValue A As Date B As Date C As Date D As Date E As String End Type 'フォームに Private Sub CommandButton1_Click() Dim pDate As String Dim oSh(1) As Worksheet Dim i As Long, k As Long Dim LastRow As Long Dim pValue() As myValue ''' TextBox1 = "2008/1/2 19:31" TextBox1 = "2009/1/6 19:31" pDate = Format(TextBox1, "yyyy/mm/dd") Set oSh(0) = Sheets("Sheet1") Set oSh(1) = Sheets("Sheet2") LastRow = oSh(1).Range("A" & oSh(1).Rows.Count).End(xlUp).Row ReDim pValue(0) For i = 1 To LastRow With oSh(1) If Format(.Cells(i, 1), "yyyy/mm/dd") = pDate Then k = k + 1 ReDim Preserve pValue(k) pValue(k).A = .Range("A" & i) pValue(k).B = .Range("B" & i) pValue(k).C = .Range("C" & i) pValue(k).D = .Range("D" & i) pValue(k).E = .Range("E" & i) End If End With Next i If UBound(pValue) = 0 Then MsgBox "指定日がありません。" Else With oSh(0) .Cells.ClearContents For i = 1 To UBound(pValue) .Cells(i, 1) = pValue(i).A .Cells(i, 2) = pValue(i).B .Cells(i, 3) = pValue(i).C .Cells(i, 4) = pValue(i).D .Cells(i, 5) = pValue(i).E Next End With End If Erase oSh End Sub 'でどうでしょうか?

関連するQ&A

  • エクセル シート上のTextBox(日付)

    今まではForm上にTextBoxを貼り、スピンボタンにて日付を変化させるのは できるのですが、これをシート上で日付を動かすと どのような記述の変化が必要なのでしょうか? TextBoxはhidukeという名でしています!日付は出るのですが スピンボタンは動きません! すいません教えて下さい! Private Sub SpinButton1_SpinDown() Me.hiduke.Value = DateAdd("d", -1, Me.hiduke.Value) End Sub Private Sub SpinButton1_SpinUp() Me.hiduke.Value = DateAdd("d", 1, Me.hiduke.Value) End Sub Private Sub hiduke_Change() Me.hiduke.Value = Format(Now(), "yyyy/mm/dd") End Sub

  • エクセルVBA「スピンボタン」について

    エクセルVBA「スピンボタン」について スピンボタンとテキストボックスを組み合わせて Private Sub SpinButton1_Change() Me.TextBox1.Value = Me.SpinButton1.Value End Sub Private Sub UserForm_Initialize() With Me.SpinButton1 .Min = 1 .Value = .Min End With Me.TextBox1.Value = Me.SpinButton1.Min End Sub というコードを書きました。 「1、2、3、・・・10、11、・・・」という数の増加を「01、02、03・・・10、11・・・」という風にしたいのですがどのようにコーディングすればよいのでしょうか?お願いします。.

  • excel2003 VBA のスピンボタンについて

    とあるワークシートにスピンボタンがあり、C2セルの値を変えるようにしています。 スピンボタンのup,downの記述は下記の通りです。 ここで、スピンボタンを長押し(どちらかに押しっぱなし)したときに、ばぁーと数字が ドンドン進んでいくようにしたいのですが、 今は長押ししても、何も変わりません。 どのように修正すればよいでしょうか? Private Sub SpinButton1_SpinDown() Range("C2").Value = Format(DateValue(Range("C2").Value) + 1, "yyyy/mm/dd") Call hyouji Application.ScreenUpdating = True End Sub Private Sub SpinButton1_SpinUp() Range("C2").Value = Format(DateValue(Range("C2").Value) - 1, "yyyy/mm/dd") Call hyouji Application.ScreenUpdating = True End Sub

  • Excel VBA スピンボタンの使い方

    Excel VBA 初心者です。 ActiveXでシート上にTextBox1とSpinButton1を配置した場合で、 SpinButton1.Valueの値をコードで設定したとき、それまでの値と異なっていてもChangeイベントを発生させない方法はあるでしょうか。 例えば以下のようなコードです。 ---------------------- Private Sub 初期設定() 'ここでSpinButton1.Enabled = False を入れてもグレーアウトするのみでChangeイベントは発生する Dim N As Long N = 20 SpinButton1.Value = N '↑TextBox1.Valueが<>Nの時でも 'ここでChangeイベントに飛ばさない方法はあるでしょうか? End Sub '↓通常はこの動作 Private Sub SpinButton1_Change() TextBox1.Value = SpinButton1.Value 'さらにこのあと数値増減による処理有り End Sub ---------------------- 「SpinButton1.Enabled = False」ではグレーアウトはしますがコードからの設定ではChangeイベントは発生しました。 宜しくお願い致します。

  • VBAプログラムについて

    VBAプログラムを本を見ながら作成していますが、はっきりいって素人です。 本に載っていないこととなるとちんぷんかんぷんで、いくつかあるプロシージャのどのプロシージャ内に記入したら良いのか分からないし、新しいプロシージャをどこに記入して良いのか分かりません。 例えば、 ----------------------------------------------------------- Private Sub CommandButton1_Click() ActiveCell.Value = TextBox1.Value ActiveCell.Offset(0, 1).Value = TextBox2.Value ActiveCell.Offset(0, 2).Value = TextBox3.Value ActiveCell.Offset(0, 3).Value = TextBox4.Value ActiveCell.Offset(0, 4).Value = TextBox5.Value ActiveCell.Offset(0, 5).Value = TextBox6.Value ActiveCell.Offset(0, 6).Value = TextBox7.Value ActiveCell.Offset(0, 7).Value = TextBox8.Value ActiveCell.Offset(0, 8).Value = TextBox9.Value ActiveCell.Offset(1, 0).Activate End Sub Private Sub CommandButton2_Click() Unload Me End Sub Private Sub Label1_Click() End Sub Private Sub UserForm_Click() End Sub Private Sub UserForm_Initialize() Range("A2").Activate End Sub ---------------------------------------------------------- テキスト入力フォームをいくつか作っており、コマンドボタン1とコマンドボタン2で入力ボタンと閉じるボタンにしています。   このプログラムでは、入力ボタンをクリックすることでデータが入力されて、入力された列のすぐ次の列の最初のセルがアクティブな状態になります。 (1)データ入力済みのエクセルシートにおいて、アクティブな状態にしたセルや列を削除したい場合、どこにどのように書けば良いのでしょうか? (2)データ入力が一度に終わらない時、途中の任意の列から入力を始めたい場合はどこにどのように書けば良いのでしょうか? 本に書かれていることは丸写しできますが、ちょっとでも違うと壁にぶつかってしまいます。 独学で勉強する時に良いと思われる方法はどんな方法なのでしょうか? おこがましいですが素人も分かりやすい説明をして頂けると助かります。 宜しくお願いします。

  • ユーザーフォームの結果を

    お世話になります。 下記の様な記述の ユーザーフォームで、 テキストボックスを3つ設け、それぞれに 年、月、日を入力し、その値を シートのあるセルに表示したいのですが、 例えば、月や日が一桁の場合には最初に「0」を 付けたいのですが、うまくいきません。 何卒、ご教示下さいます様お願い申し上げます。       記 Private Sub UserForm_initialize() SpinButton1.Max = 2050 ' 初期設定 SpinButton2.Max = 12 SpinButton2.Min = 1 SpinButton3.Max = 31 SpinButton3.Min = 1 SpinButton1.Value = Year(Date) SpinButton2.Value = Month(Date): If month_mm < 10 Then month_mm = "0" & month_mm SpinButton3.Value = Day(Date): If day_dd < 10 Then day_dd = "0" & day_dd End Sub Private Sub SpinButton1_Change() Call DAY_PUT End Sub Private Sub SpinButton2_Change() Call DAY_PUT End Sub Private Sub SpinButton3_Change() Call DAY_PUT End Sub Sub DAY_PUT() TextBox1.Value = SpinButton1.Value TextBox2.Value = SpinButton2.Value TextBox3.Value = SpinButton3.Value End Sub Private Sub CommandButton1_Click() tbox1 = TextBox1.Value tbox2 = TextBox2.Value tbox3 = TextBox3.Value Workbooks("集計表").ActiveSheet.Range("a1") = tbox1 & tbox2 & tbox3 Unload Me End Sub

  • excel2000 vba スピンボタン

    いつもお世話になっています。 下記内容の変更をしたいのですが、自分ではうまくいかず、お力をお貸しください。 よろしくお願いします。 一枚のデータシートと一枚の入力用フォームがあります。 入力フォームのスピンボタンのNOをキーにして、データシートのレコードを一件ずつ切り替えて、表示させるようにしています。 さてデータシートのオートフィルターでフィルターをかけた時に、それにあわせて、スピンボタンのNOを飛ばすようにしたいのですが、どのように修正していいか、わかりません。 現状ですと、下記プロシージャですが、いまのままだと、スピンボタンの値が一つずつしかかわりません。 'スピンボタンの値が変わったらテキストボックスに反映 Private Sub SpinButton1_Change() TextBox1.Value = SpinButton1.Value Call hyouji End Sub Private Sub hyouji() 'データを検索して表示する Dim fRange As Range Dim fRow As Long Set fRange = Sheets("data").Columns(3).Find(what:=TextBox1.Value, _ LookIn:=xlValues, lookat:=xlWhole, SearchOrder:=xlByRows) If (fRange Is Nothing) Then ' MsgBox "Noがみつかりません", vbExclamation Exit Sub End If fRow = fRange.Row '検索されたNoの行位置を求める With Worksheets("data") TextBox2.Value = .Cells(fRow, 4).Value TextBox3.Value = .Cells(fRow, 5).Value TextBox4.Value = .Cells(fRow, 6).Value TextBox5.Value = .Cells(fRow, 7).Value TextBox6.Value = .Cells(fRow, 8).Value End With SpinButton1.SetFocus End Sub ※現物ファイルを下記に投稿(No5643)させていただきました。見ていただけると幸いです。 http://www.kent-web.com/pubc/book/test/uploader/uploader.cgi

  • EXCEL VBA フォームコード簡素化

    EXCEL VBAのフォームにテキストボックスを複数作成しております。 下記のように複数のテキストボックスで同じ処理を行うのですが コントロール→ループか何かで簡素化できないでしょうか? Private Sub TextBox17_Exit(ByVal Cancel As MSForms.ReturnBoolean) TextBox17.Value = Format(TextBox17.Value, "0.00") End Sub Private Sub TextBox18_Exit(ByVal Cancel As MSForms.ReturnBoolean) TextBox18.Value = Format(TextBox18.Value, "0.00") End Sub Private Sub TextBox19_Exit(ByVal Cancel As MSForms.ReturnBoolean) TextBox19.Value = Format(TextBox19.Value, "0.00") End Sub Private Sub TextBox20_Exit(ByVal Cancel As MSForms.ReturnBoolean) TextBox20.Value = Format(TextBox20.Value, "0.00") End Sub Private Sub TextBox21_Exit(ByVal Cancel As MSForms.ReturnBoolean) TextBox21.Value = Format(TextBox21.Value, "0.00") End Sub Private Sub TextBox22_Exit(ByVal Cancel As MSForms.ReturnBoolean) TextBox22.Value = Format(TextBox22.Value, "0.00") End Sub 以上お力添えお願いいたします。

  • エクセルVBAでスピンボタン

    ワークシート上にスピンボタンを配置しました。 Valueは、Max100、Min0 で設定しました。 やりたいのは、スピンボタンでValueを減らしていって、0になるまでは何も言わず、Valueが0の状態でさらに減らそうとした場合、メッセージを出したいのです。 Private Sub SpinButton1_Change() If SpinButton1 <= 0 Then MsgBox "マイナスにはできません!", vbCritical End If End Sub としましたら、0になった瞬間にメッセージがでてしまいます。 If SpinButton1 < 0 Then としたら、マイナスにはならないので当たり前ですが何も出ません。 どうしたらいいでしょうか?

  • ユーザーフォームで

    お世話になります。 ユーザーフォームで、ユーザーに日付を選択してもらおうと 思っており、初期値として当日の日付を入れています。 テキストボックスを年、月、日と三つに分けています。 下記の記述です。 しかし、前の日付にも戻る事が出来なく、また、年は進められる のですが、同時に月と日も進んでしまいます。 年、月、日、それぞれ別々に進めたり遅らせたりしたいのですが、 どの様に記述したらよろしいでしょうか。 ご教示頂きたく宜しくお願い申し上げます。        記 Private Sub UserForm_initialize() TextBox1.Value = Year(Date) TextBox2.Value = Month(Date) TextBox3.Value = Day(Date) End Sub Private Sub SpinButton1_Change() TextBox1.Value = Year(Date) + SpinButton1.Value TextBox2.Value = Month(Date) + SpinButton1.Value TextBox3.Value = Day(Date) + SpinButton1.Value End Sub

専門家に質問してみよう