• 締切済み

UserFormを利用してシートからシートへコピー

お世話になっています。 UserFormに日付を入力したら、シート1に入力してあるデータをシート2にコピーをさせたいのですが出来ますでしょうか? シート1には、下記のようなデータがあります。 UserFormを作成し、その中には【TextBox】・【CommandButton】があり【TextBox】に日付を入力し【CommandButton】をクリックすると、シート2にそのデータがコピーされるようにしたいのですが・・・ (ちなみに、日付はバラバラに入っています) シート1   A   B      C     D    E ・ ・ ・ 7 No.   日付    商品名    金額   仕入先 8 1  2008/03/10   ○○○ 9 2  2008/03/10   ○○○ 10 3  2008/03/14   ○○○ 11 4  2008/03/13   ○○○ 12 5  2008/03/12   ○○○ 13 6  2008/03/11   ○○○ 14 7  2008/03/12   ○○○ 15 8  2008/03/13   ○○○ ・ ・   ・ ・ ・   ・ ・ ・   ・ 2008/03/12を入力した場合、 シート2   A   B      C     D    E ・ ・ ・ 7   日付    商品名    金額   仕入先 8  2008/03/12   ○○○ 9  2008/03/12   ○○○ 10 11 12 13 14 15 ・ ・   ・ ・ ・   ・ ・ ・   ・

みんなの回答

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.4

>出来ますでしょうか どれだけやってみたの。質問は丸投げでやってくださいという風だよ。 ベテランにかかればほとんどのことは出来る。「こうやったがここでうまくいきません」というのがあるべき姿だよ。 ーー この課題を解決するために、どういう要素技術が必要か考えましたか。 ものは全て、部分に分解して、その部分を組み合わせて、総合するのだ。 ーー >UserFormに日付を入力したら、 その日付を抜き出し条件に使うということか。質問の結果を見ると、そうらしいが、質問に明記のこと。 ーー 要素技術 (1)コマンドボタンをクリックしたら、実行するイベントプロシジュアー  これぐらいわかっているでしょう。 Private Sub CommandButton1_Click() test03 End Sub test01は仮に書いておくメイン処理のプロシージュアー名 (2)シート1、シート2は固定のシートらしい。 シート1を対象に-->指定日付で選別ーー>シート2に書き込む。 選別はB列の日付が、ユーザーフォームの日付と同じか、IF文で判別 するぐらい判るだろう。 (3)ユーザーフォームのテキストボックスの日付は、文字列で、エクセルの日付で使う日付シリアル値とは違うので、関数で変換して比較しないといけない。この点意識しましたか。 DateValue(文字列日付) TextBox1の値のとり方ぐらいは判っているね。 (4)シートが2つ扱うので、その区別を当然必要だが、どうするか 勉強しましたか (5)値を移す方法は色々ある。コピーを思いつく人が多いが、値代入法が本件では良い。 (6)シート1のデータ行全行について、繰り返しになるというのは予想できますか。 繰り返しは、For Nextが簡便。 ーー ユーザーフォーム1のコード Private Sub CommandButton1_Click() MsgBox UserForm1.TextBox1.Text dt = DateValue(UserForm1.TextBox1.Text) MsgBox dt test03 End Sub ーー 標準モジュール Public dt Sub test03() MsgBox dt Dim sh1 As Worksheet Dim sh2 As Worksheet Set sh1 = Worksheets("Sheet1") Set sh2 = Worksheets("Sheet2") d = sh1.Range("A65536").End(xlUp).Row MsgBox d k = 1 For i = 1 To d If sh1.Cells(i, "A") = dt Then '実際はB列 For j = 1 To 5 'Sheet1のE列までを仮定 sh2.Cells(k, j) = sh1.Cells(i, j) Next j k = k + 1 End If Next i End Sub ーー 例データ Sheet1 A列  B列  C列  D列 2008/3/1 9A54 1 2008/3/2 9A55 2 2008/3/3 9A56 3 2008/3/4 9A57 4 2008/3/5 9A58 5 2008/3/6 9A59 6 2008/3/7 9A5A 7 2008/3/8 9A5B 8 2008/3/9 9A5C 9 2008/3/12 9A5F A A 2008/3/11 9A5E B 2008/3/12 9A5F A C 2008/3/13 9A60 D 2008/3/14 9A61 E 2008/3/15 9A62 F 2008/3/16 9A63 1 2008/3/17 9A64 2 2008/3/18 9A65 3 2008/3/19 9A66 4 2008/3/12 9A5F A 5 2008/3/21 9A68 6 2008/3/22 9A69 7 2008/3/23 9A6A 8 2008/3/24 9A6B 9 2008/3/25 9A6C A 2008/3/26 9A6D B 2008/3/27 9A6E C ーー 結果 Sheet2 2008/3/12 9A5F A A 2008/3/12 9A5F A C 2008/3/12 9A5F A 5 実際やってみると、ちょっとした、色々の知識が上記以外も必要だった。質問者の現状の力では課題として無理ではないかという感想。 Private Sub CommandButton1_Click() test03 End Sub のtest03の部分に、Test03の中身のコードを突っ込むほうが良いかも。

  • okormazd
  • ベストアンサー率50% (1224/2412)
回答No.3

ANo.1 です。 hizuke = UserForm3.TextBox1.Value で、 UserForm3 になっているが、 適当なformに変更して。

  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.2

ほとんど自動記録したコードです。ご笑納下さい。 前提:元データはSheet1のA1からの表にある。転写先はSheet2のA1である。複写するのは値のみである。 'Module1に記述 Sub test() UserForm1.Show End Sub 'UserForm1に記述 Private Sub CommandButton1_Click() Sheets("Sheet1").Activate Range("A1").Select Selection.AutoFilter Selection.AutoFilter Field:=2, Criteria1:=DateValue(TextBox1.Text), Operator:=xlAnd Range("A1").Select Selection.CurrentRegion.Select Selection.SpecialCells(xlCellTypeVisible).Select Selection.Copy Sheets("Sheet2").Select Range("A1").Select Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _ False, Transpose:=False Sheets("Sheet1").Activate Selection.AutoFilter Range("A1").Select End Sub

  • okormazd
  • ベストアンサー率50% (1224/2412)
回答No.1

例 CommandButton1のコード Private Sub CommandButton1_Click() copy1to2 End Sub 標準モジュールのコード Sub copy1to2() Dim sh1 As Object, sh2 As Object, hizuke As Date Set sh1 = ActiveWorkbook.Sheets("sheet1") Set sh2 = ActiveWorkbook.Sheets("sheet2") hizuke = UserForm3.TextBox1.Value r1 = 2 c1 = 2 r2 = sh2.Cells(65536, 2).End(xlUp).Row + 1 c2 = 2 With sh1 day1 = .Cells(r1, c1) While day1 <> "" If day1 = hizuke Then sh2.Cells(r2, c2) = .Cells(r1, c1) sh2.Cells(r2, c2 + 1) = .Cells(r1, c1 + 1) sh2.Cells(r2, c2 + 2) = .Cells(r1, c1 + 2) sh2.Cells(r2, c2 + 3) = .Cells(r1, c1 + 3) r2 = r2 + 1 End If r1 = r1 + 1 day1 = .Cells(r1, c1) Wend End With End Sub

関連するQ&A

  • Excell(2003) VBA UserForm上のSheetの参照方法は

    Excell2003にてuserForm1にコントロールとしてスプレッドシートを載せています。 このuserForm1には、別にテキストボックス(textbox1)とコマンドボタンが二つ(commandButton1とCommandButton2)があります。 commandButton1がクリックされたとき、textbox1に入力された値をチェックしたのち、Me(userForm)上のSheet1の適当なセル(たとえばA2)にその値を入力したい。  また、CommandButton2がクリックされたときは、Sheet2のA2に入力したい。その場合Sheet2を表示する動作も必要です。  この場合 Q:本体のSheetではなく、フォーム上のSheetを指定する方法 Q:複数のSheetからなるフォーム上のspledSheetのいずれかを表示する方法  はどのようにしたら良いのでしょう。

  • ExcelデータをUserFormへ

    教えて下さい! 今、UserFormに【TextBox1】・【TextBox2】・【TextBox3】・【CommandBottum1】があります。 【TextBox3】にExcelの「No.」を入力して【CommandBottum1】(検索)をクリックしたら【TextBox1】に「商品名」・【TextBox2】に「金額」を表示させたいのですが、どのように行えばよいでしょうか? ちなみに、データは1~7行目までブランク、8行目はタイトル、9行目から始まります。     A    B    C 1 ・ ・ 8   No.   商品名   金額 9   1   ○○○○   80 10   2   △△△△   100 11   3   ××××   150 12   4   ■■■■   200  13   ・    ・        ・ 14   ・    ・        ・  ・    ・    ・       ・ ・    ・    ・       ・

  • VBA Excelのyy/mmm/ddをUserFormに入力

    また、質問させていただきます。 今、UserFormが開くと【TextBox1】【TextBox2】【TextBox3】に現在の日付が入るようになっています。   【TextBox1】(年 08)   【TextBox2】(月 03)   【TextBox3】(日 03) UserFormには、【CommandButton1】(登録)と【CommandButton2】(呼び出し)があります。 【CommandButton1】(登録)をクリックするとExcelに '08/03/03と表示されます。 ある日、データを間違えて入力してしまい【CommandButton2】(呼び出し)をクリックし修正する時にExcelに登録している日を【TextBox1】(年 08)【TextBox2】(月 03)【TextBox3】(日 03)と自動的に入力することは出来るでしょうか? 宜しくお願いいたします。

  • UserFormにテキストボックスを作成してその内容をExcleに反映

    初めまして。ExcelのVBAをチャレンジしています。 初心者なので良くわからないため質問させて頂きました。 今、商品登録用のユーザーフォームを作成しています。 ユーザーフォームには TextBox1=「商品No.」 TextBox2=「商品名」 TextBox3=「単価」 TextBox3=「仕入先」 CommandButton1=「登録」 CommandButton2=「終了」 があります。 「商品No.」,「商品名」,「単価」,「仕入先」を入力し、「登録」をクリックしたらExcelに横一列(参考1)に反映させ、入力・登録を繰り返し行い(商品が入ったら随時入力)下に追加していきたいのですが、どの様にすれば宜しいでしょうか? <参考1>   A    B   C   D 1 商品No. 商品名 単価 仕入先 2 001   ○○○ 10円 △△  3 ・     ・   ・  ・ 4 ・     ・   ・  ・ 5 ・     ・   ・  ・

  • (EXCEL)カレンダーコントロールについて

    (EXCEL2002) カレンダーコントロール、または万年カレンダーをシート上に作成してあり、カレンダーの日付をクリックするとVBAのUserForm1が表示されて UserForm1にはTextBox1(商品名を入力します)とTextBox2(数量を入力します)とCommandButton1(登録と記入してあります)があり、各テキストボックスに入力して登録を押すと、別シートに(日付(A列)は記入してあります)B列、C列にクリックした日付の行に記入されるようにできないでしょうか?    A   B    C  ------------ 1 | 日付 商品名 数量 2 | 1 3 | 2

  • [EXCEL VB] UserForm内でデータクリアー

    EXCEL VBで教えてください。 UserForm内に[TextBox]と[CommandButton]があります。 [CommandButton]を押下すると[TextBox]に表示されている データをClearする関数(モジュールシートの書き方)を 教えてください。

  • excel vba についてお聞きします

    excel vba についてお聞きします userformを使ってworksheetにデータを登録するといった事をしたいと考えております userformにはtextboxとcommandbuttonを配置 commandbuttonを押したらtextboxに入力した内容をworksheetに登録させる 同時にworksheetのA列には日付を登録 日付は登録をするその日付を反映させる 同じ日付があった場合は日付の登録はせずにその日付の行、B→C→Dと順に textboxのデータの登録だけをする。 日付の入るA列以外にデータが入る事になります また、textboxの内容が既にworksheetに登録済の場合 『既に登録済みです』といったメッセージを出すようにもしたいのです ご教授の程、よろしくお願いします。

  • excelのsheetを表示しないでUserFormで更新

    今日 2個目の教えてです。 一つ目もまだわからない状態なんですが お分かりの方お教え下さい。 excelを起動するとUserFormのみが起動して(excelシートは開かない)textbox1にコードを入力すると excelシートからtextbox2にデータをひっぱってきます。 そのtextbox2のところを別のデータを入力してコマンドボタンを押すと シートの値が置き換わるようにしたいのですがお教え願えないでしょうか。

  • エクセルのコピーについてご教示下さい。

    シートAのB4に日付が入っています。 C5からE10までのデータをシートBのD列に入ってる同じ日付の横に ボタンひとつでコピーするようにしたいのですが出来るでしょうか。 例えば、シートBのD20に同じ日付があれば、ボタンを押せばE21からF25にコピーするようにしたいのです。 ただ、同じ日付がない場合もありますが、その時はコピーはしません。 どなたか、よろしくお願いいたします。

  • excelでボタン一つでシートからシートへのコピーの方法。

    例) シート1に日付と商品名と単価と個数、それに特別の項目があります。 下図のような表。 =============== 日付 商品 単価 個数 4/1   A  100  1 特別 4/1    D   0   3                ←1行空いてます。 4/2    B   120   2 4/2    C   130   1                ←1行空いてます。 4/3    A   120   1 4/3    C   130   3 特別 4/3   D   0    5                ←1行空いてます。 4/4  定休日 : : 4/30 =============== このような表があるとします。 これをボタン一つでシート2にコピーしたいのです。 (簡単に言えばシート1がデータ。シート2が印刷用です。) <条件> シート2のセルの大きさは変えられませんが、それ以外はOK シート2にコピーする際に日付指定が出来ること。(1日から5日までのデータを印刷するなど。) 長々とした文になりましたが、よろしくお願いします。 また、わからないことがあれば補足いたします。

専門家に質問してみよう