ついに夏本番!さぁ、家族でキャンプに行くぞ! >>

このようなプログラムをVBAで作成したいのですが・・・。
1.選択セル上でダブルクリック
2.ユーザーフォームが立ち上がる
3.ユーザーフォームの項目に値を入力
4.コマンドボタンを押すと、入力した値が1で選択したセルに転送
5.次に1の1行下のセルに移動し、また値を入力しコマンドボタンで
  値を転送 以下5の繰り返し
というプログラムはどのように作成したら良いのでしょうか?
他の質問を参照したのですが、どうも求めているものとは違う感じです。
ご教授お願い致します。

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

A 回答 (4件)

一番重要な部分の説明を抜かしては拙いですね。



Sheet1のセルをダブルクリックして、UserFormを表示
TextBoxの値を、ActiveCellとSheet2,3のセルに代入

Sheet1のA1をダブルクリックした場合
Sheet2では、B2~
Sheet3では、C3~

'--------------------------------------------- 
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
  Cancel = True
  UserForm1.Show
End Sub

'---------------------------------------
Private Sub CommandButton1_Click()
 Dim R As Long
 Dim C As Integer

 R = ActiveCell.Row
 C = ActiveCell.Column

 ActiveCell.Value = TextBox1.Text
 Sheets("Sheet2").Cells(R + 1, C + 1).Value = TextBox1.Text
 Sheets("Sheet3").Cells(R + 2, C + 2).Value = TextBox1.Text

 ActiveCell.Offset(1).Select
 TextBox1.Text = ""
 TextBox1.SetFocus
End Sub
'--------------------------------------------
 
ただ、実際には入力する列は決まっているはずなので
その列のセルをダブルクリックしたときのみマクロが実行されるようにした方がいいのではと。
 
例えば、ダブルクリックする列は、Sheet1のA列のみだとすると

'-------------------------------------
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
  If Target.Column <> 1 Then Exit Sub
    Cancel = True
    UserForm1.Show
End Sub
'-------------------------------------

 
    • good
    • 0
この回答へのお礼

ありがとうございました。
大変参考になりました。
また機会がありましたら宜しくお願い致します。

お礼日時:2009/05/30 16:43

こうゆう事?


'ワークシートモジュールへ
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
UserForm1.Show
End Sub

'ユーザーフォームへ
Private Sub CommandButton1_Click()
ActiveCell = TextBox1.Value
ActiveCell.Offset(1).Select
End Sub

>他の質問を参照したのですが、どうも求めているものとは違う感じです。
この程度のこと、質問する人あまりいないでしょうから

この回答への補足

ご回答ありがとうございます。

詳しい内容は、回答2に記載しましたが、取得したセルの番地を
基準に、それぞれのワークシートの決められたセルへ値を転送しよう
かと考えています。
たとえば、シート1の(A、1)を基準にした場合、シート2の(B、2)
に値を転送する時に基準にしたセルから1列と1行移動した箇所へ、
これをシート3・4・・と展開したいと考えてます。

そしてユーザーフォームの一通りの項目を入力し、コマンドボタンで
各シートに値を転送したあと、次のユーザーフォームの入力で、自動的
に各シートの最初の位置から、1行下へ入力箇所を移動してこれを繰り
返していくという機能のものです。

長々とすいませんが、再度ご回答して頂けると助かります。

補足日時:2009/05/23 21:59
    • good
    • 0

こんにちは、



読んでみると、だた、セルに普通に数字を入れたほうが
良い様な、、、
わざわざ、ユーザーフォームを利用する意味が
見えません。

普通に
1.選択セル上でダブルクリック

普通にセルをダブルクリック

2.ユーザーフォームが立ち上がる

省略、

3.ユーザーフォームの項目に値を入力

省略

4.コマンドボタンを押すと、入力した値が1で選択したセルに転送

選択したセルに値を入れる。

5.次に1の1行下のセルに移動し、また値を入力しコマンドボタンで
  値を転送 以下5の繰り返し

選択セルに値を入れたら、リターンで、一行したのセルに移動。。

結果は、どのように、違うのですか。??

この回答への補足

アドバイスありがとうございます。
文章が長くなるのもどうかと思い、かなり省略して質問しました。

「わざわざ、ユーザーフォームを利用する意味が見えません。」
これは、ワークシートが全部で4枚あり、そのシートのそれぞれの
項目にユーザーフォームから一度に値を転送しようと考えています。
その際に、あるワークシートの基準となるセルの番地を取得し、
その番地からそれぞれのワークシートの何行目の何列目に値を転送
するべきかをプログラムしたいと考えてです。

確かにそれぞれに値を直接入力する方が良いのかも知れませんが、
シート・入力位置の選択をする手間を省けたらと思っています。

よい方法がありましたら、再度ご回答して頂けたら助かります。

補足日時:2009/05/23 21:49
    • good
    • 0

番地を取得しなくても値を転記することはできます。


ActiveCell.Value = Me.TextBox1.Text
    • good
    • 0

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

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

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

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

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

Qセル番号を返す関数

エクセルで、セル番号を返す関数はありますか??
セルの内容ではなくて、番号です。(A1、B3など)
調べてみましたがなかなか見つからなかったので、
わかる方教えてください。
宜しくお願い致します。

Aベストアンサー

文字として"C4"を返す。
=ADDRESS(ROW(C4),COLUMN(C4),4)

式を入力したセルの位置を文字列で返す。
=ADDRESS(ROW(),COLUMN(),4)

ADDRESSの3つ目の引数を変えると
$C$4
$C4
C$4
C4
の4つの形に出来ます。

QVBAで選択したセル番地を取得する方法はありますか??

エクセルので複数のセルを選択し、その後マクロを実行し、全てのセル番地を取得したいのですがそのような事は可能なのでしょうか??分かる方がいらっしゃいましたらお願いします。

Aベストアンサー

複数のセルを選択し、たとえば下記を実行すればセル番地が取得できます。
今はイミディエイトウインドウに表示しています。

Sub RangeAddress()
Dim rg As Range 'セル
For Each rg In Selection
Debug.Print rg.Address 'イミディエイトウインドウに表示
Next
End Sub

QSub ***( ) と Private Sub ***( ) の違い

初歩的な質問で申し訳ありませんが・・・

自分でコードを書いていても、イベントが発生したりした時の処理で、コードのウィンドウで上のドロップダウンリストで選択できる時の処理などは自動的に[Private Sub Command1_Click( )]などと出てくるのでそのまま使っています。自分で別途プロシージャーを作成する時は[Sub ****( )]としています。
ですがその違いを理解しないまま、自分で作成する時は[Private Sub]ではなくて[Sub]を使っています。

Sub ***( ) と Private Sub ***( ) の違いは何なんでしょうか?
どなたか説明頂けませんか?
よろしくお願いします。

Aベストアンサー

「Sub」の部分にカーソルを置いて[F1]を押せばヘルプが起動します。
「指定項目」のところに「Public」と「Private」の説明がありますよ。
省略して「Sub hogehoge()」とした場合は「Public」とみなされます。

Publicは「すべてのモジュールから呼び出せるプロシージャ」ということになります。
Privateとすると「同じモジュールの中からしか呼び出せないプロシージャ」となります。

もしExcelをお持ちでしたらExcelのVBEで標準モジュールを追加し、「Sub Test1()」と「Private Sub Test2()」を作成してみてください。
そしてExcelの[ツール]-[マクロ]-[マクロ(Alt+F8)]でマクロ実行のダイアログを表示させてみるとわかります。
ここには実行できるプロシージャの一覧が表示されますが、Test1は表示されているけれどTest2は表示されません。
Test1はPublicで、Test2はPrivateだからです。

Qエクセル VBA セルの個数を所得する

いつも皆様には大変お世話になっております。

早速の質問ですが、

    A    B     C     D     E
1
2       123
3       123
4       123
5       123
6
7       123
とエクセルのセルがなっている場合の
上のB2から下のB7までのセルの個数を所得したいのです
B8以降にも数字が入る場合があるのと間に空白が入る場合があるので
困っています。
B2のセルは固定となっているのでB2からの判別で問題ない状況です。
どうぞ皆様お知恵をお借りしたく思っておりますのでよろしくお願いいたします。

Aベストアンサー

質問が非常に不明確なのですが・・・

所得?取得ですよね?

単にB2:B7のセルの個数をVBAで取得するなら
MsgBox Range("B2:B7").Count

B2:B7の空白でないセルの個数なら
MsgBox Application.CountA(Range("B2:B7"))

B7まででなくB2からB列のデータがある最後までのセル個数なら
MsgBox Range("B2:B" & Cells(Rows.Count, "B").End(xlUp).Row).Count

B2からB列のデータがある最後までの空白でないセル個数なら
MsgBox Application.CountA(Range("B2:B" & Cells(Rows.Count, "B").End(xlUp).Row))

QEXCELのVBAでRange("A1:C4")を変数にする方法を教え

EXCELのVBAでRange("A1:C4")を変数にする方法を教えて下さい。

Sub Sample1()
Range("A1:C4").Borders.LineStyle = True
End Sub

上のマクロの"A1:C4"を変数にして成立させるにはどのように設定すればいいのでしょうか?
以下の方法ではエラーになってしまうので、宜しくお願いします。

Sub Sample1()

HENSU = Chr(34) & "A1" & ":" & "C4" & Chr(34)
Range(HENSU).Borders.LineStyle = True
End Sub

Aベストアンサー

こんなので好いですか?
下記をモジュールシートへ貼り付けて試行してみて下さい。

Sub Sample2()
Dim HENSU As String '←変数の宣言をします。

HENSU = Chr(34) & "A1" & ":" & "C4" & Chr(34) ' ""A1:C4"" を返します。←NG
HENSU = "A1" & ":" & "C4" ' "A1:C4" を返します。←OK
HENSU = "A1:C4" ' "A1:C4" を返します。←OK
Range(HENSU).Borders.LineStyle = True ' HENSUの範囲に罫線を引きます。
End Sub

QExcelVBAを使って、値がある場合は作業を繰り返し実行するプログラムを作成したい。

以下のようなプログラムをVBAで作成したいと考えています。

A1のセルに値があれば、その値をB1に返す。
次にA2のセルに値があれば、その値をB2に返す。
A行に値がある一番下のセルまで同じようなことをさせたいと考えています。

VBAは初心者です。
どなかた宜しくお願い致します。

Aベストアンサー

#2さんと似たものですが・・・・参考にしてください。

Sub test001()
Dim i As Long
i = 1
Do While Cells(i, 1) <> ""
Cells(i, 2) = Cells(i, 1)
i = i + 1
Loop
End Sub

QExcel VBAで複数シートをコピーする

Excel VBAで複数のシートを新たらしいブックにコピーする方法が分かりません。

一応、Selectで全てのシートを選択し
コピーする方法は分かるのですが
出来ればSelectなどの画面遷移をプログラム内に含ませたくありません

シートは n件存在します。
ご存知の方がおられましたら
ぜひ、教えて頂けないでしょうか?

Aベストアンサー

すいません、勉強不足でした。
ただ単純に「全てのシートを選択」し「新規ファイルにコピー」という動作であれば、
sheets.Select
sheets.Copy
だけでできました。

QEXCEL VBAで全選択範囲の解除

EXCEL VBAで
Cells.Select
と書くと、全セルが選択状態になりますが、
これを解除するには、どう書けばよいのでしょうか?

Aベストアンサー

その1
A1 など、適当なセルを選択する。
(回答#1と同じ)

その2
全選択する前の選択範囲に戻る。

全選択前に
変数 = Selection.Address で記憶

全選択後
Range(変数).Select で元の選択範囲を選択

QExcel VBAで、ユーザーフォームの値を、モジュールで使用したい。

VBA初心者です。(おそらく)基本的な質問で、申し訳ありません。
ユーザーフォーム1には、テキストボックス1とコマンドボタン1が配置されているとします。

Sub TEST ()
Dim N
Userform1.Show
MsgBox N
End Sub

Private Sub CommandButton1_Click()
Dim N
N = TextBox1.Text
UserForm1.Hide
End Sub

Sub TESTを実行した時に、ユーザーフォーム1からNの値を引き継ぐには、どうしたら良いのでしょうか?よろしくお願いします。

Aベストアンサー

'モジュールに変数宣言(グローバル変数)
'Public 宣言すると他のモジュールやフォームと
'共有できる変数になります。
Public AA As String

'sample
'A1 を実行する。

Sub A1()
Call A2
AA = InputBox("input", , AA)
End Sub

Sub A2()
AA = InputBox("input", , AA)
End Sub

Q別のシートから値を取得するとき

Worksheets("シート名").Activate
上記のを行ってから別シートの値を取得するのですが、
この処理を行うと指定したシートへ強制的にとんでしまいます。。。

※イメージ
For ~ To ~
  Worksheets("シートA").Activate
  シートAの値取得
       :
  Worksheets("シートB").Activate
  シートBの値取得
Next

このイメージ処理を行うとものすごい勢いで画面がチカチカします。。。
シートを変えずに他のシートから値を取得する方法はないのでしょうか。
教えてください!

Aベストアンサー

Worksheets("シートA").Range("A1")

みたいな感じでできませんか?


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

人気Q&Aランキング

おすすめ情報