このようなプログラムを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と関連する良く見られている質問

QVBAで特定の条件だったらセル番地を記載

VBAでセルの値を見て、特定の条件だったらそのセル番地を記載したい。

以下のようになっているデータがあります。

0
0
0
0
35351←●1ブロック目の始まりのセル
319241
2412
421414
351315←●1ブロック目の終わりのセル
0
0
0
0
0
43624←■2ブロック目の始まりのセル
3252
53252
452←■2ブロック目の終わりのセル
0
0
0

0が入っている行が数行あった後、数値が入っている行が数行続き、また0が入っている行、0より大きい数値が入っている行、と繰り返されているデータがあります。
0が入っている行数、0より大きい数値が入っている行数は固定ではありません。

0より大きい数値が入っている数行のデータを1ブロックとします。
1つのシートでのブロック数も固定ではありません。

データ行は4098行までで固定です。

このようなデータの1ブロックごとの始まりのセル番地と終わりのセル番地を出し、シートに記載したいです。

考えたのは2行ずつセルの値を見て、0と0より大きい数値の並びになっていればブロック始まりのセル番地として記載し、より大きい数値と0という並びになっていればブロック終わりのセル番地として記載するという方法です。

もっと単純な処理で済むようなものがあれば教えていただきたいです。

VBAでセルの値を見て、特定の条件だったらそのセル番地を記載したい。

以下のようになっているデータがあります。

0
0
0
0
35351←●1ブロック目の始まりのセル
319241
2412
421414
351315←●1ブロック目の終わりのセル
0
0
0
0
0
43624←■2ブロック目の始まりのセル
3252
53252
452←■2ブロック目の終わりのセル
0
0
0

0が入っている行が数行あった後、数値が入っている行が数行続き、また0が入っている行、0より大きい数値が入っている行、と繰り返されているデータがあります。
0が入っている行数、0より大き...続きを読む

Aベストアンサー

1行目にはタイトル行を設け,2行目から実データにします。

sub macro1()
 dim h as range
 dim n
 application.screenupdating = false
 on error resume next

’対象範囲を抽出する
 range("A1:A4098").autofilter field:=1, criteria1:=">0"

’順繰り書き出していく
 for each h in range("A2:A4098").specialcells(xlcelltypevisible).areas
 n = n + 1
 worksheets("Sheet2").cells(n, "A") = h.address
 next
 activesheet.autofiltermode = false
 application.screenupdating = true
end sub

Qユーザーフォームチェックボックスの値をセル入力

ユーザーフォームのチェックボックスでチェックされたCaption文字をExcelシート範囲(B2:B9)の入力されている文字の最後尾から続けて入力したいのですがどなたかコードが解る方よろしくお願いします。

Aベストアンサー

こんにちは!
こういうコトでしょうか?

Private Sub CommandButton1_Click()
If CheckBox1 = True Then
Range("B2").End(xlDown).Offset(1) = CheckBox1.Caption
CheckBox1 = False
End If
If CheckBox2 = True Then
Range("B2").End(xlDown).Offset(1) = CheckBox2.Caption
CheckBox2 = False
End If
If CheckBox3 = True Then
Range("B2").End(xlDown).Offset(1) = CheckBox3.Caption
CheckBox3 = False
End If
End Sub

外していたらごめんなさいね。m(_ _)m

Q番地って??

田舎なんかだと、250番地から始まって、637番地の最寄りの隣の家が1521番地だったりとか、番地がめちゃくちゃに飛んだりしていますが・・・
こういう場合、地図にない1番地とか、637番地の隣の638番地とかって、住所として存在するのでしょうか??
そもそも、番地っていったいどういう規則で振られているのでしょうか??

Aベストアンサー

番地は明治の頃に土地を測量して付けられました

1番地から始まり川や道路に沿って順次増えていきます
しかし、土地には広さがあるので、全ての方向に順番には付けられません。
地番が増えていって地域の境界まで行くと起点に戻り、その隣からまた順次増えていくような付け方がしてあります

さらに、当時の宅地・農地と山林は異なる付け方がしてあります(宅地・農地は1番地~、山林は4000番地~等)

一つの番地を区分けすると(分筆) 何番地の1 の様に付けます 何番地の5甲 とか何番地の10イ などと付けられている場所もあります

二つの番地の土地を一緒にすると(合筆)地番が消滅します
ですから、離合集散を繰り返した土地では、地番の欠番もあります

以下余談
この明治の頃の測量に基づいた図面は、位置の参考にするだけの図面で、境界確認等には使用できないことになっています

昭和30年代以降に、法律に基づいて境界確認し測量した図面は、境界等の決定に強制力がありますが、まだほんのわずかしか作成できておりません

Qユーザーフォームの値を指定のセルに入力

エクセルのシート上のフォームで
リストのボックスの値を上下キーで値を選択エンターキーで選択した値をシートの指定したセルに入力
フォームを閉じる

このようなことをさせたいのですが
どのようにすればよいでしょうか
よろしくお願いいたします。

Aベストアンサー

ユーザーフォームはくわしくないのですが、とりあえず最低限のサンプルを作ってみました。

リストボックスが配置されたフォームは作成済みとします。
フォーム名はUserForm1、リストボックス名はListBox1であるとします。

UserForm1のコードを以下のようにします。

Private Sub ListBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If KeyCode = vbKeyReturn Then
ThisWorkbook.Sheets("Sheet1").Range("A1").Value = ListBox1.Value
ThisWorkbook.Sheets("Sheet1").Range("A2").Value = ListBox1.ListIndex
Unload Me
End If
End Sub

Private Sub UserForm_Initialize()
ListBox1.AddItem "アイテム1"
ListBox1.AddItem "アイテム2"
ListBox1.SetFocus
End Sub

あとはユーザーフォームを表示させ、上下矢印キーでアイテム選択し、Enterキーでフォームを閉じます。アイテムの値とインデックス値はA1とA2に入力されます。

ユーザーフォームはくわしくないのですが、とりあえず最低限のサンプルを作ってみました。

リストボックスが配置されたフォームは作成済みとします。
フォーム名はUserForm1、リストボックス名はListBox1であるとします。

UserForm1のコードを以下のようにします。

Private Sub ListBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If KeyCode = vbKeyReturn Then
ThisWorkbook.Sheets("Sheet1").Range("A1").Value = ListBox1.Value
ThisWorkbook.Sheets(...続きを読む

QC++でメモリの絶対番地を指定する方法はありますか。

C++でメモリの絶対番地を指定する方法はありますか。
あるプログラムでメモリの指定した番地にデータを書き込み、別のプログラムで同じ番地のデータを読み込めるようにしたいと思ってます。プログラムは作ったのですが、絶対番地を指定していないようで、別のプログラム側で同じ番地を指定しても同じデータが読み込めません。

Aベストアンサー

仮想記憶が働いてるマルチプロセスOS(WindowsやLinux)は、メモリ空間が完全に独立していますのでプログラム(プロセス)間でメモリ内容を相互参照するには特別な仕組みが必要です。メモリを共有する場合は、同期処理も合わせて必要ですので注意してください。

WindowsAPIの場合のサンプル
http://nienie.com/~masapico/api_CreateFileMapping.html

QExel VBA コンボボックスで選択した値以外の値をセルに入力する方法

初めて質問します。

コンボボックスから選択した値によって、
セルに値を入力する方法を教えて下さい。

コンボボックスの値は、1、2、3。
1を選択した時には、A1にA、
2を選択した時には、A2にB、
3を選択した時には、A3にCを入力する。

といったかんじにしたいです。
本やネットなど色々調べてみたのですが、わかりませんでした。
初歩的な質問かもしれませんが、どなたか教えて下さい。
よろしくお願いします。

Aベストアンサー

Sheet1にコンボボックスを1つ貼り付ける。
そのプロパtィのListFillRangeをたとえばI1:I3にし、I1に1、I2に2、I3に3を入れる。
Combobox1をダブルクリックして出てくるところの
Combobox1のchangeイベントに
Private Sub ComboBox1_Change()
Range(Cells(1, 1), Cells(3, 1)) = ""
If ComboBox1.Value = 1 Then Cells(1, 1) = "A"
If ComboBox1.Value = 2 Then Cells(2, 1) = "B"
If ComboBox1.Value = 3 Then Cells(3, 1) = "C"
End Sub
デザインモードを脱する。
これでコンボボックスの値を選ぶと
A1kaA2かA3に値をセットし、今までの他の選択値は消える。
Case文で分けても良いと思う。

Q相続 -土地の番地変更について

私の家の隣に住んでいた叔父の家と土地(50坪程度)を相続することになりました。
私の家の隣なので、番地は1つ違いです。
(私の家の番地:xxx-1、叔父の家の番地:xxx-2という感じ)

この相続時に、叔父の土地の番地をxxx-2から私の土地xxx-1に統合
することは可能なのでしょうか?
また、叔父の土地の番地変更が可能な場合、番地を統合することによる
メリット、デメリットがあればご教授頂けますでしょうか。
(たとえば、土地2軒分の固定資産税を払うよりも、番地を統合した方が
固定資産税が安くなる等)

私名義の土地が番地違いで並ぶことの必要性を考えていたのですが、
メリットが分からず、質問させていただきました。

Aベストアンサー

合筆登記を行えば、合筆される側の地番が無くなり、合筆される地番が残ると思います。
メリットは無いと思います。デメリットとしては、各種税金の面ですね。
土地は広ければ使いやすいため、評価が高くなることでしょう。
間口が広くなったり、道路に面する場所が増えますからね。

必要性が無いのであれば、合筆しないほうが良いと思います。
郵便物なども、枝番が3以降ないのであれば、郵便局の配達員に伝えれば枝番なしでの配達もしてくれることでしょう。

さらに、いつ分筆されたかはわかりませんが、昔と今では分筆するのは高額な費用が発生します。
既に分筆されている土地であれば、今の方法を取らずに境界のみを確定すれば売却なども簡単です。
参考までに、分筆の場合には、衛星座標などを用いた測量を土地全部図面に起こさなくてはなりません。そして、そのようなプロを土地家屋調査士といいますが、その対象となる土地の広さにより費用もかかりますし、建物の位置や大きさ、数によっても異なることでしょう。
同一の名義人が連なる土地を所有していれば、あわせた使い方も問題ないことでしょうしね。

ちなみに、私の実家の農地ですが、一つの田んぼが6筆に渡っています。枝番号が1~6あります。支障がないため何十年も放置していますね。手放す際にも、筆単位での売却も可能なため、複数の人、一部の売却なども可能ですからね。

最後に、必要が無いからといって建物を取り壊したりすると、さらに固定資産税が増加するかもしれません。これは、宅地としての利用なのか、更地の状態なのかで評価が異なるためです。建物が危険などで取り壊してしまわなくてはならず、あなたが農業従事者であれば、農地にされることで税金を安くすることも可能かと思います。ただ、農地にすると規制を受けるため計画的に考える必要があるでしょうけどね。

合筆登記を行えば、合筆される側の地番が無くなり、合筆される地番が残ると思います。
メリットは無いと思います。デメリットとしては、各種税金の面ですね。
土地は広ければ使いやすいため、評価が高くなることでしょう。
間口が広くなったり、道路に面する場所が増えますからね。

必要性が無いのであれば、合筆しないほうが良いと思います。
郵便物なども、枝番が3以降ないのであれば、郵便局の配達員に伝えれば枝番なしでの配達もしてくれることでしょう。

さらに、いつ分筆されたかはわかりませんが、昔と...続きを読む

QエクセルVBAでユーザーフォームのコマンドボタンをクリックするたびに

社内アンケートを作っています。質問は80問あり、1問ごとにユーザーフォームが表示されます。ユーザーフォームには「次へ進む」のコマンドボタンと質問内容を表示させるテキストボックスがあり、1問目を答えて「次へ進む」をクリックすると2問目の質問が表示され、さらに「次へ進む」をクリックすると3問目が表示されるという風にしたいのですが、2問目以降の質問を表示させられません。うまく表示させるにはどういうコードにすればよいのでしょうか?

Aベストアンサー

回答形式が不明なのでオプションボタンを2つ配置しYes,Noの二択で答えるということにしました。参考までに。

使用コントロール
TextBox1
cmdSusumu
optYes
optNo


'コードここから
Dim Question(80) As String
Dim QNo As Long

Private Sub UserForm_Initialize()
Question(1) = "1ですか?"
Question(2) = "2ですか?"
Question(3) = "3ですか?"
'  :
Question(80) = "80ですか?"

QNo = 1
TextBox1.Text = Question(QNo)
End Sub


'次へ進むボタン
Private Sub cmdSusumu_Click()

If optYes Or optNo Then  '回答しないと進めない

If optYes Then
'yesを記録
optYes.Value = False
Else
'noを記録
optNo.Value = False
End If

If QNo < 80 Then  '次の問題の表示
QNo = QNo + 1
TextBox1.Text = ""
TextBox1.Text = Question(QNo)
End If

End If
End Sub

回答形式が不明なのでオプションボタンを2つ配置しYes,Noの二択で答えるということにしました。参考までに。

使用コントロール
TextBox1
cmdSusumu
optYes
optNo


'コードここから
Dim Question(80) As String
Dim QNo As Long

Private Sub UserForm_Initialize()
Question(1) = "1ですか?"
Question(2) = "2ですか?"
Question(3) = "3ですか?"
'  :
Question(80) = "80ですか?"

QNo = 1
TextBox1.Text = Question(QNo)
End Sub


'次へ進むボタン
Private Sub cmdSusumu_Cl...続きを読む

Q番地について

引越しするのですが、不動産に言われた番地が存在しません。mapfan.comで検索したり、航空地図上は1番地違いの11番地はありますが12番地は存在しないのです。

仕方なく、もう一度不動産屋に確認したのですが、前に済んでいた人は、12番地よと言われ公共料金が登録できなかったらまた連絡くれと言われてしまいました。

結局12番地で公共料金は登録できたのですが、
マンションの為、1番地違いで郵便が届かない事はまずないと思いますが、書留が届くのかとか、転入ができるのかとか不安です。
どなたかお詳しい方いらっしゃいますでしょうか?

Aベストアンサー

これは管轄の市区町村の都市計画課のような(各地で名称が違います)住居表示を管理している部署に問い合わせる事をお勧めします。

住居の表示決定方法は、その地域で異なります。例えば現在居住中の家は、付近の10世帯以上(全部一戸建て)が同じ住所を使っています。つまり1丁目2番3号の家が10件以上あるのです。また隣の市では同じような場合には、1-2-3(1)とか(2)とかカッコ付きにするそうです。川崎のほうでは左から順に1号、2号、3号と並んでいるのに突然150号になり、また5号、6号となっていくのもあるそうです。また北海道の郊外では、何とか番外地、なんていうのもあります。

よって12番だけが何らかの理由によってない、ということも十分あるとおもいます。その場合には市によって救済措置があることもあるので、とりあえず担当の役所に問い合わせることをお勧めします。

QExcelVBA ユーザーフォームかコマンドボタン出現状態でシートを編集したい

ExcelでVBAを使いアプリを作っています。
何とかして、一時的にとあるボタンを表示させ、それを表示させたままでシート内容を編集できるようにしたいと思っています。
調べましたが、ボタンのみを出現させる術はわかりませんでした。できるのでしょうか。
それがダメなら、ユーザーフォームが出ている間、シートを編集可能にすることはできるでしょうか。

Aベストアンサー

こんにちは。
>ユーザーフォームが出ている間、シートを編集可能にする
UserForm1.Show vbModeless
...の事でいいのかな?
UserForm1のプロパティでShowModalをFalseに設定しても良いですが。
>ExcelでVBAを使いアプリを作っています。
>何とかして、一時的にとあるボタンを表示させ...
から考えると、オリジナルのツールバーなどで対応したほうがいいかもしれませんネ^ ^


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

人気Q&Aランキング

おすすめ情報