エクセルのマクロ(データベースの登録フォーム)について

最近の書き込み件数: 今日 0件、昨日 0件
未読分:4件

最新20件 最新50件 最新100件 最新200件 200件以前
昨日以降(0) 2日前以降(0) 3日前以降(0) 4日前以降(0) 5日前以降(0)


Excel VBAでIEを思いのままに操作できるプログラミング術 Excel 2013/2010/2007/2003対応

近田 伸矢, 植木 悠二, 上田 寛

IEのデータ収集&自動操作のプログラミング本はこの1冊だけ!IEの起動やポップアップウィンドウ、表示を制御する基本的なコードはもちろん、テキストボックスやラジオボタン、表、ハイパーリンクなどのHTML部品を制御する方法など、自動操作に欠かせないノウハウを丁寧に解説。

Message#4 2014年12月16日(火)14時09分
From: ちゃーちゃー
返事 削除 変更
Sub 累積保存()
Dim lRow As Long
lRow = Worksheets("Sheet2").Range("C" & Rows.Count).End(xlUp).Row + 1
If lRow < 5 Then lRow = 5
With Worksheets("Sheet1")
Worksheets("Sheet2").Cells(lRow, 3).Value = .Cells(1, 2).Value
Worksheets("Sheet2").Cells(lRow, 4).Value = .Cells(2, 2).Value
Worksheets("Sheet2").Cells(lRow, 5).Value = .Cells(3, 2).Value
End With
End Sub

Message#3 2014年12月16日(火)14時07分
From: マスタージョイン
返事 削除 変更
ご質問の内容は やりたい事が解りやすく整理されていて
質問者の素養が感じられて好印象をえました!

そこで、どうせなら1から始めましょう
1)とりあえず1言
産地コード、産地-->産地マスタ シートを作成して置く
種別コード、種別-->種別マスタ シートを作成して置く

--都道府県コード(JIS規格) 産地マスタ---
A列 、 B列
産地コード、産地名
1 北海道
2 青森県
3
4
5
6
:
:
:
:
47 沖縄県
-----------------------------
2)TextBox3~TextBox8はやめて
ComboBox1~ComboBox6に変更しましょう。理由は
いちいち都道府県をテキスト入力するのは効率が悪いしタイプミスもあり得るので次に説明する方法でComboBoxにセットしておきましょう。

///////コンボ設定方法//////
VBAエディターで左ペインのUserForm1を右クリック->コード表示を左クリック
右ペインの左上▼でUserform を選択
右上の▼でInitialize を選択すると以下のような空っぽのイベントサブプロシージャができます。
これは、ユーザーフォームがShow ()やLoadで
メモリに最初に読み込まれた時に1回だけ発生するイベントです。
HideのあとのShowでは発生しません。
ちなみにUserForm_Activate()イベントはアクティブになるたびに呼び出されるイベントです。どのタイミングでマスタを読むのか?
たとえば商品マスタなどは稼働中に追加変更される場合を考えてUserForm_Activate()やWorkSheet_Change()イベントなどでComboBoxを再設定します。
ここでは都道府県なので、フォーム表示中の変更は無いはずなのでInitialize()で良いと思います。

[動作条件] Sheets("産地マスタ")に上記説明の都道府県データが有ること。
UserForm1.Show (vbModeless)でテストしてみてください。
■以下をUserForm1のコード域へコピペしてください■


Private Sub ComboBox1_Change()
TextBox9 = ComboBox1.Value
End Sub
Private Sub ComboBox2_Change()
TextBox10 = ComboBox2.Value
End Sub
Private Sub ComboBox3_Change()
TextBox11 = ComboBox3.Value
End Sub
Private Sub ComboBox4_Change()
TextBox12 = ComboBox4.Value
End Sub
Private Sub ComboBox5_Change()
TextBox13 = ComboBox5.Value
End Sub
Private Sub ComboBox6_Change()
TextBox14 = ComboBox6.Value
End Sub
Private Sub UserForm_Initialize()
Dim Rmax As Long
Dim i As Byte
Dim c As Byte
With Sheets("産地マスタ")
'1行目が見出しの場合沖縄は48行目ですが
'最終行を得る方法として 最下行からCTRL+↑で止まったセルの行を得る方法が一般的です
'他にSpecialCells()でVBA内の既定の定数を利用して範囲指定する場合もあります
'xlCellTypeConstants 定数が含まれているセル 定数値= 2
'xlCellTypeFormulas 数式が含まれているセル 定数値= - 4123
'この場合以下の2行の結果Rmaxの値は同じですが 途中に空白行があると結果は異なります。
' 別法 Rmax = .Columns(1).SpecialCells(xlCellTypeConstants).Rows.Count
Rmax = .Cells(Cells.Rows.Count, "A").End(xlUp).Row

For i = 2 To Rmax
For c = 1 To 6
Controls("Combobox" & c).ColumnCount = 2
Controls("Combobox" & c).TextColumn = 2
Controls("Combobox" & c).BoundColumn = 1
Controls("Combobox" & c).ColumnWidths = "0.4 Cm;2 Cm"
Controls("Combobox" & c).AddItem
Controls("Combobox" & c).List(i - 2, 0) = .Cells(i, "A") '産地名code
Controls("Combobox" & c).List(i - 2, 1) = .Cells(i, "B") '産地名
Next
Next
End With
End Sub

今後私宛に質問くだされば、何度でも回答します。段階的に行きましょう!

Message#2 2014年12月15日(月)21時08分
From: VBAマスター
返事 削除 変更
あまりにも内容が多すぎるのではまずは処理の流れを頭に入れてから考えたらどうですか?
答えを載せたところで、エラーなどが起きた場合に対応できませんよ。
とりあえず@シートに追加したい行数を求めます。のところだけでいうと

行数を求めるには最終行をVBAで取得してから、for〜Nextステートメントを利用して、
1行ずつチェックしていくといいでしょうね。

どのような構成かは分かりませんが、簡単にいうと以下のような形になるかと思います。

r=.Cells(Rows.Count, 1).End(xlUp).row

for i=1 to r

チェック内容

next i

Message#1 2014年12月15日(月)21時01分
From: ジャック
返事 削除 変更
エクセルマクロ初心者です。
エクセルのマクロ(データベースの登録フォーム)についてご教授お願いいたします。

大変長く、拙い文章となっております。
申し訳ございません。
また画像を参照してしていただけますと幸いです。

下記を登録ボタン(CommandButton1)を押した際に起動させたいと思っております。

@シートに追加したい行数を求めます。

産地に配置されたテキストボックス(TextBox3~8)の空白では無い物の数
×
種別に配置されたテキストボックスの空白では無い物の数(TextBox21~26)の数字を求めます。

例)全てが埋まっている場合6×6=36
TextBox3、TextBox4ならびにTextBox21が記載されている場合は2×1=2
(TextBoxは必ず若い数字の順に埋めます)

伝達事項1(TextBox27)が記載無しの場合、上記の数字+0
伝達事項1(TextBox27)が記載有り、伝達事項2(TextBox29)が記載無しの場合、上記の数字+1
伝達事項1(TextBox27)が記載有り、伝達事項2(TextBox29)も記載有りの場合、上記の数字+2

※伝達事項1が記載無し、伝達事項2が記載無しのケースはありません。

ここで求めた数値を行数とします。

例)産地(TextBox3~8)・種別(TextBox21~26)がすべて埋まっていて、伝達事項1が記載有り、伝達事項2も記載有りの場合6×6+2=38


Aシートに行数を追加する。

追加シート名(ListBox1)で選択されたシート名を検索する。

※ListBox1にはフォームを開いた時点で

Sub Macro1()
UserForm1.Show
Dim sh As Worksheet
For Each sh In ActiveWorkbook.Sheets
UserForm1.ListBox1.AddItem (sh.Name)
Next
End Sub

上記マクロでシート名を読み込んでいます。

選択されたシートに@で求めた行数を最下行に加えます。


Bデータの入力

上記で選択されたシートに
A列に品番(TextBox1)
B列に産地(TextBox3-8)
C列に産地コード(TextBox9-14)
D列に種別(TextBox15-20)
E列に種別コード(TextBox21-26)
F列に価格(TextBox14)
G列に伝達事項(TextBox27、29)
H列に伝達相手(TextBox28、29)
の値を入力していきます。

データ入力のルールは
B-1)追加した行数の全てに記載するもの
A列の品番(TextBox1)、F列の価格(TextBox14)

B-2)追加した行数にTextBoxに記載されたデータに依存して記載するもの
B列の産地(TextBox3-8)、C列の産地コード(TextBox9-14)、D列の種別(TextBox15-20)、E列の種別コード(TextBox21-26)
※必ず
(TextBox3-8)に入力されたデータの数=(TextBox9-14)入力されたデータの数かつ
(TextBox15-20)に入力されたデータの数=(TextBox21-26)入力されたデータの数です。

B-3)固定で最下行に追加するもの
G列の伝達事項(TextBox27、29)、H列(TextBox28、29)の伝達相手です。
※必ず
(TextBox27、29)に入力されたデータの数=(TextBox28、29)入力されたデータの数です。


B-2)TextBoxに記載されたデータに依存して記載するもののデータ入力ルールは
まず上の行からD列ならびにE列にTextBoxの数字が若い順にTextBoxに記載された内容を入力。
これを1ブロックとします。
それを産地に記載されたデータの個数分だけ繰り返す。

B列ならびにC列には1ブロックごとにTextBoxの数字が若い順にTextBoxに記載された内容を入力。


B-3)固定で最下行に追加するもの
aとbの処理終了後、
伝達事項1(TextBox27)が記載無しの場合、
処理完了。

伝達事項1(TextBox27)が記載有り、伝達事項2(TextBox29)が記載無しの場合、
最下行のG列に伝達事項1(TextBox27)の内容を、最下行のH列に伝達相手1(TextBox28)の内容を記載

伝達事項1(TextBox27)が記載有り、伝達事項2(TextBox29)も記載有りの場合、
最下行の一つ上のG列に伝達事項1(TextBox27)の内容を、最下行の一つ上のH列に伝達相手1(TextBox28)の内容を記載
最下行のG列に伝達事項1(TextBox27)の内容を、最下行のH列に伝達相手1(TextBox28)の内容を記載


以上の処理を行いたいと思っております。
大変長い文章ならびに多くの処理が必要かと思います。
また大変拙い文章で誠に申し訳ございません。
つきましては、上記のマクロの記述(一部でも大変有難く存じます。)をご教授いただけませんでしょうか。
当方、現在エクセルのVBAを勉強している最中なのですが、若い頃に仕事を含めコンピューターを使うことが無かった為、かなり苦戦しております。

皆様のお力添えいただけますと幸いでございます。
長文失礼いたします。
何卒よろしくお願い申し上げます。

画像参考URLです。
フォーム
http://www.fastpic.jp/images.php?file=3437327040.jpg

実行例@
http://www.fastpic.jp/images.php?file=0377730932.jpg

実行例A
http://www.fastpic.jp/images.php?file=5270884660.jpg

最新20件 最新50件 最新100件 最新200件 200件以前
昨日以降 2日前以降 3日前以降 4日前以降 5日前以降

ExcelのVBAについてのQ&A掲示板

↑ExcelのVBA全般について分からない事があればこちらの掲示板よりご質問ください^^

VBAのInternetExplorer操作入門

↑ExcelのVBAをマスターできたら、エクセルVBAのIE(InternetExplorer)操作にも挑戦してみてください^^

VBAのIE制御入門RSS

RSSフィードを登録すると最新記事を受け取ることができます。

VBAIE操作のスカイプレッスン

エクセルVBAのステートメント

こちらでは、エクセルVBAの事例で利用したステートメントをまとめたものです。ExcelのVBAには様々な機能が用意されていますので一度ご確認ください。

エクセルVBAのオブジェクト

こちらでは、エクセルVBAの事例で利用したオブジェクトをまとめたものです。ExcelのVBAには様々な機能が用意されていますので一度ご確認ください。

エクセルVBAのプロパティ

こちらでは、エクセルVBAの事例で利用したオブジェクトのプロパティをまとめたものです。ExcelのVBAには様々な機能が用意されていますので一度ご確認ください。

エクセルVBAのメソッド

こちらでは、エクセルVBAの事例で利用したオブジェクトのメソッドをまとめたものです。ExcelのVBAには様々な機能が用意されていますので一度ご確認ください。

エクセルVBAのイベント

こちらでは、エクセルVBAの事例で利用したオブジェクトのイベントをまとめたものです。ExcelのVBAには様々な機能が用意されていますので一度ご確認ください。

dmb.cgi Ver. 1.068
Copyright(C) 1997-2014, hidekik.com