• ベストアンサー

エクセルVBAユーザーフォームからブックへの入力

エクセルVBAでユーザーフォームを作成しました。 それをどうやったらブックに反映させられるのかが分かりません・・ 項目が40以上あります。 シートの任意の場所へ数値を入力させるためのソースを教えて下さい。 また、そういったフォーマットを公開しているところがあれば教えて下さい!! 住所録など入力するサンプルを見たのですが、そのまま項目を変更して使えたらとっても嬉しいのですが・・・ 大至急なのでどなたか力を貸して下さい!! よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • ham_kamo
  • ベストアンサー率55% (659/1197)
回答No.4

> 1日分は1行で入り、次の日に入力したらその下の行に1行 > 追加されるようにはどうしたらよいのでしょう? 1日1行で、A列には日付が入っており、1行目には項目名などのタイトル行となっているのでしょうか。 もしそうであれば、B列から右に日報に記入する項目が入っているとして、たとえばB列で一番下に何か入力されているセルを取得するには、 Range("B65535").End(xlUP) という式をよく使います。今日の分を反映させようとした場合、「昨日の分」ですね。この1つ下のセルを指定するには、さらに Range("B65535").End(xlUP).Offset(1,0) とすればいいです。 このセルを基準にOffset(0,1)などとしてセルを指定してもよいですし、Rowプロパティから行番号が指定できるので、それを変数に代入して(仮にrとすると) Cells(r,2) = ... Cells(r,3) = ... などとしてもよいでしょう。

get3
質問者

お礼

本当になんてお礼を言っていいのか・・・。 意外と簡単な事なのですね。勉強次第でいろんな事ができるのですね。 長々とありがとうございました。 がんばって完成させます!!!!!!!!

その他の回答 (3)

  • ham_kamo
  • ベストアンサー率55% (659/1197)
回答No.3

こんにちは。大変な仕事を任されてしまいましたね。 けっこう初心者にとってはハードルが高い課題(?)です。 仰る通り、この場では説明しきれないことが多い(本をまるまる1冊解説することになりそう)ので、書籍やネットで勉強されるのがいいかと思いますが、何がお勧めかと言われると、ちょっと思い当たりません。 私自身はもともとプログラミングを仕事でやっており、フォームを使ったプログラミングは別の言語から入り、ExcelVBAも似たようなものだったので、Excelのヘルプを利用しながらわからないことがあったらそのつどネットでキーワード検索している程度なので、どの書籍で勉強したとかいうわけではないので。 専門書の充実している大きめの本屋に行けば、コンピュータ関連のコーナーにExcelVBAの本はたくさんあるので、中を見比べて、自分がわかりやすそうだと思うものを購入されるのが確実かと思います。最初はカラーで図がたくさんあって丁寧に解説してある本がいいかもしれません。それで基礎を勉強されてから、もっと詳しいことが解説されている本をさらに買って勉強されるといいと思います。 せっかくのQ&Aサイトなので、別途新たに「ExcelでVBAを使ってユーザーフォームを作っているが、初心者にもわかりやすい本やサイトを教えてください」と質問されると、他の方が教えてくださるかもしれませんね。

get3
質問者

補足

ありがとうございます。 すみません、最後に1つだけ教えて頂きたいのですが、1日分のフォームを作っていて、エクセルのシートには1か月分を入れる表を作っていまして、1日分は1行で入り、次の日に入力したらその下の行に1行追加されるようにはどうしたらよいのでしょう?EndとOffsetをどのように記述しても上書きされたり65536行に入ってしまうのですが・・・。 よろしくお願いします!!

  • ham_kamo
  • ベストアンサー率55% (659/1197)
回答No.2

「テキストボックス毎にボタンをつける」ではなく、 「全てのテキストボックスの内容をセルに反映させるボタンを1つつける」です。 (もちろん、テキストボックス毎につけてもいいのですが) 項目が40以上あるのですよね。だいたいはTextBoxだと思いますが、それぞれにオブジェクト名がついています。フォーム上でTextBoxを選択したら、左のプロパティ欄の(オブジェクト名)というところに名前が出ます。自分で変更してなかったらTextBox1とかついているはずです。(普通はプログラム内でわかりやすいように自分で変えますが) それらに入力されたをまとめてブック上のセルに転記するボタンを「1つ」作るのです。(ボタンの作り方はわかりますよね?) そしてボタンを押した時の処理として、No.1で回答したように、セルにテキストボックスの内容を代入する文を、テキストボックスの数だけ書いていけばいい、ということです。 エラーハンドリングとは、不正な値が入力されたり、省略してはいけない項目が空の場合をチェックしてエラーメッセージを表示する、といったようなことです。プログラムを作る上で非常に重要です。

get3
質問者

補足

ていねいなご回答ありがとうございます。 なんとか入力できました。よく数えたら105項目ありました・・・。 この1つのブックを作成するのに指示された形にかなり遠いので、まだまだ勉強しなければいけないと思うのですが、いいサイトや本はありませんでしょうか? いちいち全部質問していたらきりがないような気がして・・・。時間がないのでじっくり作っていく事もできませんし・・・。 例えば、このフォームは毎日の日報を入力するのですが、フォーム内に日付が自動で表示させる欄があり、1度確定させたら次の日のフォームに移る、という事は可能なのでしょうか?あと確定させてエクセルのシートに移ったら人が触れない形、PDFファイルに変換して表示させるとか・・。できるかどうかも分からない事だらけなんです。 すみません、よろしくお願いします。

  • ham_kamo
  • ベストアンサー率55% (659/1197)
回答No.1

フォームにボタンを貼り付けて、それをクリックすると各TextBoxの内容をセルに代入すればいいのでは? 仮にボタン名をCommandButton1とすると、フォームに貼り付けたボタンをダブルクリックすると、 Private Sub CommandButton1_Click() End Sub と自動的に出てくるので、この中に、   With ThisWorkbook.Worksheets("Sheet1")     Range("A1").Value = TextBox1.Value      :      :   End With とテキストボックスの内容をセルに代入する処理を記述していけばいいでしょう。エラーハンドリングもした方がいいですね。

get3
質問者

補足

すみません。昨日始めた超初心者で・・・。 テキストボックス毎にボタンをつける、という事でしょうか? ところで、エラーハンドリングとは何でしょう? よろしくお願い致します!!

関連するQ&A

専門家に質問してみよう