初めまして。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 ・     ・   ・  ・

このQ&Aに関連する最新のQ&A

A 回答 (2件)

必要最低限のコードです。


実情に合わせて変更してください。


Private Sub CommandButton1_Click()
 Dim i As Long
 i = Range("A65536").End(xlUp).Row + 1
 Range("A" & i) = Format(UserForm1.TextBox1.Value, "000")
 Range("B" & i) = UserForm1.TextBox2.Value
 Range("C" & i) = UserForm1.TextBox3.Value & "円"
 Range("D" & i) = UserForm1.TextBox4.Value
End Sub
    • good
    • 1
この回答へのお礼

早速の回答有難うございます。
上記コードで無事出来ました!
とても、助かりました!

お礼日時:2008/02/11 12:38

まず第一に原理的には下記になります。


Range("A2")=商品No
Range("B2")=商品名
Range("C2")=単価
Range("D2")=仕入先

1.Range("A1")の部分は動的に変わるので変数化した方が楽になります。
例えば下記のようにして
Cells(x,y)=商品No
xとyの値をその都度設定します。

2.Forなどのループ処理を入れるとコード的に美しくなります(修正も楽になります)。

3.常に最終行の次の行に入力するということになるので、最終行の取得を自動化することも必要です。
利用するのはUsedrangeやEnd(xlUp)になります。
参考
http://www.k1simplify.com/vba/tipsleaf/leaf23.html

最終的には上記内容をそれぞれ組み合わせて一本化します。
最初の部分以外は別に必須というわけでもないです。幾らでもやりようがあるので(例えば最終行はActiveCellのある行をそれとみなすとか、挿入する行はその都度ユーザーに選択させるとか)、泥臭い方法だけでも一応形にはなります。
正解が別にあるわけではないので、ヘルプや色々な参考サイトをまわって理解しやすいコードをコピペして、それを修正しながら作っていきましょう。
    • good
    • 0
この回答へのお礼

早速の回答有難うございました!
そうなんですよね、正解がある訳ではないので色々試してはみるのですが、なかなか上手くいかずいつも苦労しております。
参考サイトも教えてくださって有難うございました。

お礼日時:2008/02/11 12:34

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qフォーム御礼とは何ですか?

こんにちは。
あるブログで「フォーム御礼」という言葉を見かけましたが、どういう意味でしょうか?教えてください。

Aベストアンサー

そのブログサイトに設置されているメールフォームなどから
送られてきたブログ閲覧者からのメッセージに対する
ブログ管理者のお礼ではないでしょうか。

QVBA・リストボックスの内容をセルに反映

 ListBox1からListBox2に追加した項目を、コマンドボタンを押すと、Sheet3のA1から下に並べていくようにしたいのですが、どうもうまくいきません。
リストボックスのプロパティにLinkedCellというのがあるらしいのですが、使っているバージョンには無いみたいです。
もう何日も頭をひねっているのですが、初心者なのでわかりやすく教えて頂けませんでしょうか?よろしくお願いします。

Aベストアンサー

思い違いはあるかと思いますが、こんなのではどうでしょう?
ユーザーフォームにリストボックスを2つ、ボタンを1つ貼り付け、ボタンを押すとリスト1で選択された値がリスト2にAddItemされ、かつ、リスト2の内容がシート3のA列に出力するようにしてみました。

----------------------------------------------
Option Explicit

'フォームイニシャライズ
Private Sub UserForm_Initialize()
'リスト1のRowSourceをシート1のA1からA4に設定
Me.ListBox1.RowSource = "Sheet1!A1:A4"
End Sub

'ボタン押下時
Private Sub CommandButton1_Click()
Dim i As Integer
'リスト1で選択された項目をリスト2へAddItem
With Me.ListBox1
For i = 0 To .ListCount - 1
If .Selected(i) Then
Me.ListBox2.AddItem .List(i)
End If
Next i
End With
'シート3のA列へ転記するプロシージャを実行
Call Disp
End Sub

'シート3にリスト2の値を出力するサブプロシージャ
Private Sub Disp()
Dim i As Integer
Dim row As Integer

'一旦A1を含むエリアをクリア
Sheet3.Range("A1").CurrentRegion.Clear
'リスト2の値を出力
row = 1
For i = 0 To Me.ListBox2.ListCount - 1
Sheet3.Range("A" & row).Value = Me.ListBox2.List(i)
row = row + 1
Next i
End Sub
----------------------------------------------

思い違いはあるかと思いますが、こんなのではどうでしょう?
ユーザーフォームにリストボックスを2つ、ボタンを1つ貼り付け、ボタンを押すとリスト1で選択された値がリスト2にAddItemされ、かつ、リスト2の内容がシート3のA列に出力するようにしてみました。

----------------------------------------------
Option Explicit

'フォームイニシャライズ
Private Sub UserForm_Initialize()
'リスト1のRowSourceをシート1のA1からA4に設定
Me.ListBox1.RowSource = "Sheet1!A1:A4"
End ...続きを読む

Q“フォーム”とは何でしょうか。

“フォーム”というインターネット関連の言葉を最近耳にいたします。

検索を試みましたが、しっくりと理解できません。

特徴を教えていただけないでしょうか。
何ができるのでしょうか。その例を教えていただきたく願います。

Aベストアンサー

「フォーム」とは、データを送信するための窓といったらいいでしょうか。gooでも、検索するときに検索キーワードを入力するボックスがありますよね。それやチェックボックスなんかを総称して「フォーム」と呼びます。

「フォーム」を使えば、ユーザーが任意に選んだ情報をサーバーに送信できるという特徴がありますね。(つまり選択肢のなかから選択といったことが可能になる)

QVB6 テキストボックスの数値をコンボボックスに反映させるには?

TextBoxのChangeイベントを使って、
テキストボックスの数値をコンボボックスに反映させる
(具体的には数値をコンボボックスのindex数にし、それぞれのindexに
アニメ+str(i)としたいです。
しかし、後で書くソースは何故か、コンボボックスが
アニメ1
アニメ0
アニメ1
アニメ2
アニメ3

となってしまいます。
これを
アニメ0
アニメ1
アニメ2
アニメ3

としたいです。どうすればいいんでしょうか?

Private Sub Text8_Change()
Static p As Integer

If Text8.Text = "" Then Exit Sub

For i = 0 To p
If p = 0 Then GoTo b
If Form6.Combo1.NewIndex = -1 Then GoTo b
Form6.Combo1.RemoveItem (i)
Next i
b:
For i = 0 To Val(Text8.Text)
Form6.Combo1.AddItem "アニメ" + str(i)
Next i
p = Val(Text8.Text)
End Sub

TextBoxのChangeイベントを使って、
テキストボックスの数値をコンボボックスに反映させる
(具体的には数値をコンボボックスのindex数にし、それぞれのindexに
アニメ+str(i)としたいです。
しかし、後で書くソースは何故か、コンボボックスが
アニメ1
アニメ0
アニメ1
アニメ2
アニメ3

となってしまいます。
これを
アニメ0
アニメ1
アニメ2
アニメ3

としたいです。どうすればいいんでしょうか?

Private Sub Text8_Change()
Static p As Integer

If Text8.Text = "" Then Exit Su...続きを読む

Aベストアンサー

RemoveItem (i)
は、どこまで削除したいですか?
全件削除してよいなら、
Form6.Combo1.ListCountで件数拾えるので、
Forループを件数まわしますか。

Private Sub Text8_Change()
 Static p As Integer
 Dim nCount as Ineteger

 MsgBox "処理を開始する時点で、pの値は" & p & "だよ”

 'でも、なぜここでIF文? 処理がここで終わりますね
 If Text8.Text = "" Then Exit Sub

 MsgBox "処理を進めるよ”

 MsgBox "削除前の時点でコンボの件数は”& Form6.Combo1.ListCount & "だよ"

 If p <> 0 Then
  nCount=Form6.Combo1.ListCount
  For i = nCount To 0 step -1
   If Form6.Combo1.NewIndex <> -1 Then
    Form6.Combo1.RemoveItem (i)
   END IF
  Next i
 END IF

 MsgBox "削除後の時点でコンボの件数は”& Form6.Combo1.ListCount & "だよ"


 p = Val(Text8.Text)
 For i = 0 To p
  Form6.Combo1.AddItem "アニメ" + str(i)
 Next i

 MsgBox "追加後の時点でコンボの件数は”& Form6.Combo1.ListCount & "だよ"

End Sub

RemoveItem (i)
は、どこまで削除したいですか?
全件削除してよいなら、
Form6.Combo1.ListCountで件数拾えるので、
Forループを件数まわしますか。

Private Sub Text8_Change()
 Static p As Integer
 Dim nCount as Ineteger

 MsgBox "処理を開始する時点で、pの値は" & p & "だよ”

 'でも、なぜここでIF文? 処理がここで終わりますね
 If Text8.Text = "" Then Exit Sub

 MsgBox "処理を進めるよ”

 MsgBox "削除前の時点でコンボの件数は”& Form6.Combo1.ListCount & "だよ...続きを読む

Qメールフォームのソースにある「id="sen"」とは何?

人にもらったメールフォームをカスタマイズしてフォームを作っています。一行のテキスト入力フィールドのソースが以下のようになっています。
<INPUT type="text" size="50" maxlength="50" name="mail1" id="sen">
フィールドは複数あるのですが、どれも「id="sen"」がついていて、これが何を規定しているものかわかりません。html制作はホームページビルダーを使いましたがそのような設定項目はなく、Web制作の本をみても載っていません。なくてもいいものなのか、設定が必要なものなのか、わかる方、教えて下さい。
(私はhtmlを作成し、あとはプログラマに修正してもらうことになっているのですが、そのプログラマの方もよくわからないようです。)

Aベストアンサー

idはスタイルシートやJavaScript、DynamicHtmlで使用される要素です。
そういった類のものがソース内になければ、idは消去しても問題ないはずです。

参考URL:http://www.tohoho-web.com/html/attr/id.htm

QEXCEL2003 VBAのテキストボックス

ユーザーフォームからの入力・操作のみでシート上の住所録を編集出来るものを作ろうとしております。

テキストボックスの値の操作についての質問なのですが、端的に説明しにくいので自分で記述したコードと共に説明させていただきます。


シートはA列に氏名、B列に住所が入るようにし、100件のデータを格納出来るようにします。1行目はタイトルです。
セル範囲の名前は以下のように定義付けしています。
 A2:A101 「氏名」
 A2:B101 「住所録」

ユーザーフォームには以下のオブジェクトを配置しております。
 「名前」入力・出力用テキストボックス(オブジェクト名:TB1)
 「住所」入力・出力用テキストボックス(オブジェクト名:TB2)
 名前検索用コンボボックス(オブジェクト名:CMB)
 「追加」コマンドボタン(オブジェクト名:CB1)
 「訂正」コマンドボタン(オブジェクト名:CB2)


まずは新規データの入力。テキストボックス(TB1, TB2)に入力した後の「追加」コマンドボタン(CB1)クリック時の処理は以下のコードでうまくいっております。

Private Sub CB1_Click()
Range("A65536").End(xlUp).Select
Selection.Offset(1, 0).Select
Selection = TB1
Selection.Offset(0, 1).Select
Selection = TB2
Range("住所録").Sort _
Key1:=Range("A2"), _
Order1:=xlAscending, _
Header:=xlNo, _
OrderCustom:=1, _
MatchCase:=False, _
Orientation:=xlTopToBottom, _
SortMethod:=xlPinYin
End Sub

同じテキストボックス(TB1, TB2)を使いデータの訂正をする為、コンボボックス(CMB)に以下のコードを記載しました。
尚、コンボボックスのRowSourceは「氏名」です。

Private Sub CMB_Change()
Dim AA As String
AA = CMB.Value
TB1.Value = Application.WorksheetFunction.VLookup(AA, Range("住所録"), 1)
TB2.Value = Application.WorksheetFunction.VLookup(AA, Range("住所録"), 2)
End Sub

これでコンボボックスで選択した名前からテキストボックスに名前と住所を表示することができました。


ここからが上手くいきません

テキストボックスに表示された文字を同じテキストボックス上で変更し、変更後の情報を「訂正」コマンドボタン(CB2)クリックでシート上に送るために以下のコードを記述しました。

Private Sub CB2_Click()
Dim BB As String
BB = CMB.Value
Dim CC As Range
Set CC = Range("氏名").Find(what:=BB, LookIn:=xlValues, _
LookAt:=xlWhole, SearchOrder:=xlByRows)
Cells(CC.Row, CC.Column).Select
Selection = TB1
Selection.Offset(0, 1).Select
Selection = TB2
Range("住所録").Sort _
Key1:=Range("A2"), _
Order1:=xlAscending, _
Header:=xlNo, _
OrderCustom:=1, _
MatchCase:=False, _
Orientation:=xlTopToBottom, _
SortMethod:=xlPinYin
CBM.ListIndex = -1
End Sub

これを実行してもシートには訂正後の情報が反映されず訂正前の情報が入ってしまいます。

ここで訂正後の情報を反映させるためにはどうしたらよろしいのでしょうか。

ユーザーフォームからの入力・操作のみでシート上の住所録を編集出来るものを作ろうとしております。

テキストボックスの値の操作についての質問なのですが、端的に説明しにくいので自分で記述したコードと共に説明させていただきます。


シートはA列に氏名、B列に住所が入るようにし、100件のデータを格納出来るようにします。1行目はタイトルです。
セル範囲の名前は以下のように定義付けしています。
 A2:A101 「氏名」
 A2:B101 「住所録」

ユーザーフォームには以下のオブジェクトを配置しております。
...続きを読む

Aベストアンサー

Private Sub CB2_Click()の最後で
Selection = TB2
が抜けていました。これが原因で提案した
コードでデータが訂正されなかったようです。

また、必要の無いイベント
Private Sub CB3_Click()
が最後にありましたので
削除しました。

あらためて以下で確認してみてください。


Private Sub UserForm_Initialize()
Dim lRow As Long
With Worksheets("Sheet1")
lRow = .Range("A" & Rows.Count).End(xlUp).Row
End With
With CMB
.ColumnCount = 1
.RowSource = "Sheet1!A2:A" & lRow
End With
End Sub


Private Sub CB1_Click()
Dim x As String
Range("A65536").End(xlUp).Select
Selection.Offset(1, 0).Select
Selection = TB1
Selection.Offset(0, 1).Select
Selection = TB2

'コンボボックスの再設定で追加
Dim lRow As Long
With Worksheets("Sheet1")
lRow = .Range("A" & Rows.Count).End(xlUp).Row
End With
With CMB
.RowSource = "Sheet1!A2:A" & lRow
End With
End Sub

Private Sub CB2_Click()
Dim BB As String
Dim CC As Object

BB = CMB.Text

With Worksheets(1).Range("A2:A101")
Set CC = .Find(What:=BB, LookIn:=xlValues, lookat:=xlWhole, _
SearchOrder:=xlByColumns, MatchByte:=False)
Cells(CC.Row, CC.Column).Select
Selection = TB1
Selection.Offset(0, 1).Select
Selection = TB2

End With

End Sub

Private Sub CB2_Click()の最後で
Selection = TB2
が抜けていました。これが原因で提案した
コードでデータが訂正されなかったようです。

また、必要の無いイベント
Private Sub CB3_Click()
が最後にありましたので
削除しました。

あらためて以下で確認してみてください。


Private Sub UserForm_Initialize()
Dim lRow As Long
With Worksheets("Sheet1")
lRow = .Range("A" & Rows.Count).End(xlUp).Row
End With
With CMB
.ColumnCount = 1
...続きを読む

Q質問フォームからの情報とは

よくホームページなどで、
「ご意見・ご感想はコチラ」のような入力するところがありますが、
(アドレスへ送るのではなく、入力フォームです)
あれは送り元であるこちらの情報、
例えばPCやケータイの何らかの情報も自動的に送られるものなのでしょうか?

同じPCから二度送れば、同じ情報が出て発送者が分かったりするものでしょうか?

Aベストアンサー

そのフォームサービスによって違うと思いますが、IPとHostが分かってしまうものがあります。
そういったものだと同じPC・ケータイからの発信なら分かってしまうでしょう。

QExcel VBA ユーザーフォームのテキストボックスで

Excel2000or2003でマクロを作っております。
ユーザーフォームのテキストボックスで、例えば時間を入力するとします。
Private Sub TextBox1_Change()
Worksheets("Work").Range("B3").Value = TextBox1
End Sub
と書いたところ、セルには数値としてではなく文字として入ってしまうようで、後のルーチンで計算できません。
数値として扱うには、どうしたら良いでしょうか?
お手数ですが、ご教授願います。

Aベストアンサー

TextBox1.Text
で取れる値は、数字で入力されても文字列の数字です。
文字通りテキストです。
Worksheets("Work").Range("B3").Value = Val(TextBox1)
で済むことでは。Val関数を使う。

QGV-RX26T256HのPCBフォームとは?

http://www.links.co.jp/html/press2/gigabyte_gv-rx26t256h.html
今度、上記サイトのボードを買おうと思っているのですが、PCBフォームの意味が分かりません。
私のPCはマイクロATXなので、もしかしたら使えないのでしょうか?
スペックは
M2A-Vm
AMD DC 5000+
CFD W2U800CQ-1GLZJ PC2-6400 2G
DVD ASUS DRW-2014L1T B BULK
HDD HITATHI GST 160G
M-60BK (ブラック・電源なし)
ZUMAX 400W

宜しくお願いします。

Aベストアンサー

PCBフォームはATX、PCBサイズは175mm×111mm
ざんねんながら ATX仕様ですが PCはマイクロATX無理かと思いますが
上は高さ と 長さ表示です。
ケースによるかな
ついでに言っときますがASUSU とGIGABYTE 相性悪いよ
同メーカー選んだ方が正解ですが

Qexcel vba ppt テキストボックス中央揃

したい事:エクセルからパワーポイントを作成したい
      テキストボックスを作成
      テキストボックスの文字を中央揃え←ここができないのです;;

すいません、色々試したのですが中央揃えができません、どなたかご指導して頂けないでしょうか?

↓途中までのソース
Sub PP作成_Click()
Dim app As Object
Dim pre As Object
Dim sld
  Dim sh As Object

Set app = CreateObject("powerpoint.application")
app.Visible = True

' // PP を表示する
app.Visible = True
' // PP 新規プレゼンテーション作成
Set pre = app.Presentations.Add(WithWindow:=True)
' // PP 新規スライド挿入
Set sld = pre.Slides.Add(Index:=1, Layout:=12)

  Set sh = sld.Shapes.AddTextbox(msoTextOrientationHorizontal _
, 100, 100, 200, 50)

  With sh.TextFrame.TextRange
   .Text = "テスト"
.Font.Size = 100
.Font.Name = "HGP創英角ゴシックUB"
  End With
End Sub

したい事:エクセルからパワーポイントを作成したい
      テキストボックスを作成
      テキストボックスの文字を中央揃え←ここができないのです;;

すいません、色々試したのですが中央揃えができません、どなたかご指導して頂けないでしょうか?

↓途中までのソース
Sub PP作成_Click()
Dim app As Object
Dim pre As Object
Dim sld
  Dim sh As Object

Set app = CreateObject("powerpoint.application")
app.Visible = True

' // PP を表示する
app.Vis...続きを読む

Aベストアンサー

hakatanosiさん こんにちは。

With sh.TextFrame.TextRange の下に次のプロパティを設定すればできると思います。
 
   .ParagraphFormat.Alignment = 2

ご確認ください。


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

おすすめ情報