Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


4536 / 13646 ツリー ←次へ | 前へ→

【55757】選択複数セルのデータ取得 おじさん46 08/5/18(日) 17:22 質問[未読]
【55769】Re:選択複数セルのデータ取得 わいわい 08/5/19(月) 9:34 発言[未読]
【55837】Re:選択複数セルのデータ取得 おじさん46 08/5/20(火) 21:14 質問[未読]
【55838】Re:選択複数セルのデータ取得 わい 08/5/20(火) 21:27 発言[未読]
【55903】Re:選択複数セルのデータ取得 おじさん46 08/5/22(木) 21:26 回答[未読]
【55904】Re:選択複数セルのデータ取得 わいわい 08/5/23(金) 0:34 発言[未読]
【55921】Re:選択複数セルのデータ取得 わいわい 08/5/23(金) 15:04 発言[未読]
【55928】Re:選択複数セルのデータ取得 わいわい 08/5/23(金) 17:43 発言[未読]
【55929】Re:選択複数セルのデータ取得 おじさん46 08/5/23(金) 20:33 回答[未読]
【55948】Re:選択複数セルのデータ取得 おじさん46 08/5/25(日) 11:32 質問[未読]
【55958】Re:選択複数セルのデータ取得 わいわい 08/5/26(月) 9:52 発言[未読]
【55969】Re:選択複数セルのデータ取得 おじさん46 08/5/26(月) 23:04 発言[未読]
【55970】Re:選択複数セルのデータ取得 わいわい 08/5/27(火) 9:07 発言[未読]
【55977】Re:選択複数セルのデータ取得 おじさん46 08/5/27(火) 20:25 発言[未読]
【56032】Re:選択複数セルのデータ取得 おじさん46 08/5/29(木) 23:09 発言[未読]
【56041】Re:選択複数セルのデータ取得 Abebobo 08/5/30(金) 10:46 発言[未読]
【56044】Re:選択複数セルのデータ取得 neptune 08/5/30(金) 11:34 回答[未読]
【56047】Re:選択複数セルのデータ取得 Abebobo 08/5/30(金) 13:37 発言[未読]
【56057】Re:選択複数セルのデータ取得 おじさん46 08/5/30(金) 20:12 発言[未読]
【56062】Re:選択複数セルのデータ取得 おじさん46 08/5/31(土) 13:41 発言[未読]
【56074】Re:選択複数セルのデータ取得 neptune 08/5/31(土) 22:33 発言[未読]
【56081】Re:選択複数セルのデータ取得 おじさん46 08/6/1(日) 9:30 お礼[未読]
【55935】Re:選択複数セルのデータ取得 おじさん46 08/5/24(土) 12:34 発言[未読]
【55941】Re:選択複数セルのデータ取得 わいわい 08/5/24(土) 22:22 発言[未読]
【55942】Re:選択複数セルのデータ取得 neptune 08/5/24(土) 23:07 発言[未読]
【55945】Re:選択複数セルのデータ取得 おじさん46 08/5/25(日) 10:16 発言[未読]
【55947】Re:選択複数セルのデータ取得 わいわい 08/5/25(日) 11:05 発言[未読]
【56049】Re:選択複数セルのデータ取得 VBWASURETA 08/5/30(金) 14:10 発言[未読]

【55757】選択複数セルのデータ取得
質問  おじさん46  - 08/5/18(日) 17:22 -

引用なし
パスワード
   VBAの勉強も兼ねて注文伝票発行ファイルを作成しています。


選択した1個のセルのデータを取得して表の一番下に記録することは出来たんですが、

Private Sub CommandButton1_Click()
 
  TextBox1.Value = Range(Selection.Address)

End Sub

Private Sub CommandButton2_Click()

  Worksheets("sheet1").Activate
  
  With Range("B9").End(xlDown).Offset(1, 0)
    .Value = TextBox1.Value
  End With
  
End Sub

これが複数セルになると、てんでわかりません。
学習しながら作りたいと思いますので、ご指導をお願いします。

シートの配列は下記の通りです。
  B   C   D   E     F   G    H
9 連番 日付  品名  規格   数量 単価  金額  ※金額はセル内計算(=F*G)でもとめます。
10 1   080515 ペン  PE-A01  5   103.56 517.80
11 2   080517 付箋  F-U01-5 3   80.72 242.16
12
13

行10のデータ(B10:H10のセルを選択して)をテキストボックスに順に表示したいと思っています。

流れは、
B10→TextBox1へ ※連番の作成は後日勉強します。
C10→TextBox2へ ※日付は"Now"関数で行こうと思っています。
D10→TextBox3へ
E10→TextBox4へ
F10→TextBox5へ
G10→TextBox6へ

そして、行12におのおの記録と思ったています。
記録の前に印刷があるのですが構想がまだまとまってないので、後日勉強したいと思っています。
部分的ですがよろしくお願いします。

【55769】Re:選択複数セルのデータ取得
発言  わいわい  - 08/5/19(月) 9:34 -

引用なし
パスワード
   おじさん46 さん おはようございまます。

学習しながら・・・ ということなので
複数セル(B10:H10)を選択した状態で下記マクロを実行

Sub 複数セル選択()
Dim r As Range
For Each r In Selection
  MsgBox "セル番号: " & r.Address & Chr(10) & "値:   " & r.Value
Next r
End Sub

TextBoxで変数を使用するには
Sub 変数()
Dim i As Long
 i = 2
 ActiveSheet.OLEObjects("TextBox" & i).Object.Value = "テキスト2"
End Sub

実は私も解らなかったので
”シートで ActiveX コントロールを使用する”
のヘルプを参考にしました。

上記2つのマクロで一応できます。

【55837】Re:選択複数セルのデータ取得
質問  おじさん46  - 08/5/20(火) 21:14 -

引用なし
パスワード
   わいわい さん 連絡をありがとうございます。

>Sub 複数セル選択()
は、エラーなく動きました。

> For Each r In Selection
ここは初めて見ました。
調べています。

次の
>Sub 変数()

> ActiveSheet.OLEObjects("TextBox" & i).Object.Value = "テキスト2"
でエラーが出ました。
なぜエラーが出るかわかりませんが、知らない言語があるのでこれも調べています。

質問もできない状態なので少し時間を下さい。
読めてきましたら質問します。

【55838】Re:選択複数セルのデータ取得
発言  わい  - 08/5/20(火) 21:27 -

引用なし
パスワード
   しまったぁ おじさん46 さんすみません
ユーザーフォーム上の話でしたか?
UserForm1.Controls("TextBox" & i).Text
かな?

【55903】Re:選択複数セルのデータ取得
回答  おじさん46  - 08/5/22(木) 21:26 -

引用なし
パスワード
   わいわいさん
すぐ返事をくれたんですね。ありがとうございます。

私の説明が不十分の様です。
ご迷惑をかけました。もう一度書きます。

概要
注文伝票作成ファイルの作成を思っています。
フォーム上でテキストボックスに必要事項を入力して、
それをシート上に記録して、印刷も同時にと思っています。
ある程度データが溜まれば過去の記録をオートフィルターで探してセルを選択することで印刷して、シート上に記録できればと思っています。

Sheet1上は、
CommandButton1=ボタン   UserForm1を開くボタンです。
  B   C   D   E     F   G    H
9 連番 日付  品名  規格   数量 単価  金額  ※金額はセル内計算(=F*G)で。
10 1   080515 ペン  PE-A01  5   103.56 517.80
11 2   080517 付箋  F-U01-5 3   80.72 242.16
12
13

UserForm1上は、
CommandButton1=ボタン Sheet1の選択されたセルから各TextBoxへデータを収集するボタンです。
CommandButton2=ボタン UserForm1上の各TextBoxに表示されたデータを、
            ここでは空白のB12:H12に格納するボタンです。
TextBox1=テキストボックス  B列の連番の収集・格納用
TextBox2=テキストボックス  C列の日付の収集・格納用
TextBox3=テキストボックス  D列の品名の収集・格納用
TextBox4=テキストボックス  E列の規格の収集・格納用
TextBox5=テキストボックス  F列の数量の収集・格納用
TextBox6=テキストボックス  G列の単価の収集・格納用

あと、
CommandButton3=ボタン UserForm1上の各TextBoxに表示されたデータを、
            印刷するボタン。
を作る予定です。

しかし、私の知識では選択した1個のセルのデータを取得して表の一番下に記録することはまでしか出来なかったんです。

CommandButton1=ボタンで
Private Sub CommandButton1_Click()
 
  TextBox1.Value = Range(Selection.Address)

End Sub

CommandButton2=ボタンで
Private Sub CommandButton2_Click()

  Worksheets("sheet1").Activate
  
  With Range("B9").End(xlDown).Offset(1, 0)
    .Value = TextBox1.Value
  End With
  
End Sub

一個のセルを選択して、一個のテキストボックスに表示して、そのテキストボックスのデータしかシートのセルに書き出す事しか出来ませんでした。
これが複数セルになると、てんでわかりません。
ご指導をお願いします。

【55904】Re:選択複数セルのデータ取得
発言  わいわい  - 08/5/23(金) 0:34 -

引用なし
パスワード
   おじさん46 さんこんばんわ

たった今、自宅のPC(XP)の再インストールが完了しました。
でも、Officeがないので オープンオフィスとたわむれていました。
差し当たり 記事55824 が参考になると思います。

*もうIE7とSP3は入れないぞー

【55921】Re:選択複数セルのデータ取得
発言  わいわい  - 08/5/23(金) 15:04 -

引用なし
パスワード
   おじさん46 さん こんにちは
ちょっと時間が空きましたので
勉強のねたになればさいわいわいです。

’UserForm1のモジュール−−−−−−−−−
Private Sub CommandButton1_Click()
 データ収集
End Sub

’Sheet1のモジュール−−−−−−−−−−−
Private Sub CommandButton1_Click()
 UserForm1.Show 0
End Sub
−−−−−−−−−−−−−−−−−−−−−−−−


’標準モジュール−−−−−−−−−−−−−
Sub データ収集()
Dim r As Range
Dim i As Single

i = 1
For Each r In Selection
  r.Interior.ColorIndex = 6   '説明用
  UserForm1.Controls("TextBox" & i).Text = r.Value
  i = i + 1
  Application.Wait (Now + TimeValue("0:00:01"))  '説明用
  r.Interior.ColorIndex = xlColorIndexNone  '説明用
Next r
End Sub
’−−−−−−−−−−−−−−−−−−−−

”’説明用のコード”はFor Each が理解できているようでしたら消してください。

Sub データ収集の説明
iという変数ををTextBoxの指定用に用意(初期値1)
rという変数(Range)が Selectionをひとつづづ進みます。
注1.rの潜伏先の確認用で セルの塗りつぶしを、ColorIndex 6 で塗りつぶします。
UserForm1会のControls組に属する 組員TextBox &その1
のTextを 現在rが潜伏中の値にします。
次に 組員TextBox &その2 としたいので i = i + 1
rの潜伏先を確認したいので、今から一秒間 次の作業をとめる
潜伏先が変わる前にセルの塗りつぶしを、無し に消息を絶つ
r は次の潜伏先に移る。

上記で一応動くはずですが、Selection で指定になると、色んなトラップを仕掛ける必要があると思います。

つづく かな

【55928】Re:選択複数セルのデータ取得
発言  わいわい  - 08/5/23(金) 17:43 -

引用なし
パスワード
   今日はサボりっぱなしだなぁ
という事で つづき 

>Selection で指定になると、色んなトラップを仕掛ける必要があると思います。
の説明をば
例えば、(B10:H10のセルを選択して) なのですが、
Sub データ収集 ではTextBoxが6ヶ有るとしか想定していません。
でも、B10:H10のセルを選択してしまうと i が7まで増えちゃいます。
UserForm1会のControls組に属する 組員TextBox &その7 は UserForm1会から盃をもらっていないので 潜伏中の犯人r が困ってしまいます。
 If Selection.Count <> 6 Then Exit Sub
上記の もしセレクトされたセルのカウントが 6 でなかったら ミッション終了
で多少の危険は回避できますが・・・。

私なら、

’Sheet1 のモジュール−−−−−−−−−−−−−−−−−−−−−−−
Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
Dim r As Range
Dim i As Single
If Target.Column <> 1 Then Exit Sub
If Target.Row = 1 Then Exit Sub
Cancel = True

UserForm1.Show 0
i = 1

'For Each r In Target.Offset(0, 1).Range("A1:F1")
For Each r In Target.Offset(, 1).Resize(, 6)  '*ちょっと修正しました。
  UserForm1.Controls("TextBox" & i).Text = r.Value
  i = i + 1
Next r
End Sub

’Sheet1 のモジュールに上記 BeforeRightClick(右クリックイベント)にしちゃって
CommandButton1を押す代わりに、データを収集したいセルのA列を右クリックするようにしちゃうかな。

Ps. えらそうな事書いちゃっていますけど私も初級者 自分自身の向上の為に突っ込みもお待ちしています。

【55929】Re:選択複数セルのデータ取得
回答  おじさん46  - 08/5/23(金) 20:33 -

引用なし
パスワード
   矢継ぎ早の回答ありがとうございます。
返事はちょっと待って下さいね。

追伸 XPのSP3は良くないんですか?
   私は「のどかな南国のカメ」ビスタです。

【55935】Re:選択複数セルのデータ取得
発言  おじさん46  - 08/5/24(土) 12:34 -

引用なし
パスワード
   わいわいさんへ
十分理解はしていませんが、自分なりに解釈しました。

Dim r As Range
'選択変数rを宣言。
Dim i As Single
'文字型変数iを宣言。

i = 1
'iは1です。
For Each r In Selection
'選択された中でr回を下記の処理を繰り返す。
  r.Interior.ColorIndex = 6
  'Rのオブジェクトのカラーを黄色に。
  UserForm1.Controls("TextBox" & i).Text = r.Value
  'UserForm1フォーム上の各々のテキストコントロールiにr回数返しなさい。
  i = i + 1
  'r回iに1を足していきなさい。
  Application.Wait (Now + TimeValue("0:00:01"))
  '実行する時は今の時間より1秒後に。
  r.Interior.ColorIndex = xlColorIndexNone
  'Rのオブジェクトのカラーを無しに。
Next r
'選択された中のRのステートメントを終了する。

です。
自分なりにシンプルに変えようとしましたら。
「'説明用」を削除したものになりました。
気持ちよく動きます。

ありがとうございます。
次はつづきに行きます。o(^-^)o

【55941】Re:選択複数セルのデータ取得
発言  わいわい  - 08/5/24(土) 22:22 -

引用なし
パスワード
   おじさん46 さん こんばんは。
>Dim i As Single
>'文字型変数iを宣言。

これは・・・。
iは数値です。数値じゃないと足し算ができませんから。
と、As Byte のほうが良いかな。と反省しています。
詳しくはヘルプの データ型 の欄を読んでください。
ちなみに・・・私にはさっぱり意味不明です。
でもたまにはわかり易いヘルプもありますので見る癖をつけましょう。

あとは オッケー!! です。

【55942】Re:選択複数セルのデータ取得
発言  neptune  - 08/5/24(土) 23:07 -

引用なし
パスワード
   おじさん46 さん わいわい さん
こんにちは

ちょっと気になったので失礼します。
>iは数値です。数値じゃないと足し算ができませんから。
>と、As Byte のほうが良いかな。と反省しています。
iはカウンターですから、long型か、integer型の方が良いですね。
byte型はbyte型のデータ操作をする為の方と思っていた方が良いです。

理由: どの型を使っても、最近のパソコンは32bit主流ですから、
数値型は32bitに変換されて処理されるそうです。従って、カウンタなどでは
long(4byte)が変換の処理も不要だし一番良いのではないかと思います。

わいわい さんのXP SP3の警告?のおかげでIE7削除してからSP3インスト
しました。IE7はとりあえず再インストしました。助かりました。
今のところ不具合は感じません。

【55945】Re:選択複数セルのデータ取得
発言  おじさん46  - 08/5/25(日) 10:16 -

引用なし
パスワード
   わいわいさんへ

ありがとうございます。
がんばってヘルプを見る様にします。
ある程度知識がないと見てもわからい(豊富な知識を持っている人が作ったんですから)ことが多いいんですが、がんばります。

追伸
わいわいさんの文章は元気があるし、読んでて元気が出ます。
他の質問も拝見させてもらいましたが、明るいですね。
これからもご指導お願いします。

【55947】Re:選択複数セルのデータ取得
発言  わいわい  - 08/5/25(日) 11:05 -

引用なし
パスワード
   みなさんおはようございます

neptuneさんありがとうございます。
>iはカウンターですから、long型か、integer型の方が良いですね。
>byte型はbyte型のデータ操作をする為の方と思っていた方が良いです。
↑最近はVBAの経験をつんできたので、PCへの負担が減らすことも考えていました。(大した負担では無いのしょうが、色気が・・)ビット数の少ない Byteなら 整数の255まで使える と考えていました。もう少し 知識の方もUPしなければだめですね。HELPや過去ログ(わたしは、実はHELPよりも過去ログ派)でがんばります。
これからのよろしくお願いします。

Ps.IE7 と SP3 は私の言いがかり・・・?。
IE7にしたとたん勝手にエクスプローラーが勝手に終了するようになりました。
そして、SP3を入れた後に妻が何かしていてPCを離れていたら画面が真っ暗になっていてどうにもならなかったので、電源ボタンを”ぶっちん”。これが致命傷を与えたものと思われます。で、インターネットでSP3の不具合報告みかけたので、そう思うようになりました。

【55948】Re:選択複数セルのデータ取得
質問  おじさん46  - 08/5/25(日) 11:32 -

引用なし
パスワード
   わいわいさん

次ページやっています。
右クリックイベントですが、すごいですね。
で、
セルを6個選択するのが大変なので、行番号を選択して同じ様な事をしないかなと思って行ったら、UserForm1.の行でやはりエラーが出ました。
まずは、この場合どう考えたらいいのですか。
ご指導をお願いします。m(__)m

【55958】Re:選択複数セルのデータ取得
発言  わいわい  - 08/5/26(月) 9:52 -

引用なし
パスワード
   おじさん46さん おはようございます。
さすがに今日は仕事をチャットこなさなければならないので、さらっと!

>セルを6個選択するのが大変なので、行番号を選択して同じ様な事を・・
ユーザーフォームをモードレスで表示しているので、そのままA列を右クリックすれば、その行の情報が更新されるはずです。
もう一案
UserForm1にもう一個 行番号を入力するTextBox を増やし TextBox7とします。
ユーザーフォームモジュールに
Private Sub TextBox7_AfterUpdate()
Dim t7 As Long
Dim i  As Long
 t7 = Me.TextBox7.Text
 i = 1
 For i = 1 To 6
  Me.Controls("textbox" & i).Text = _
                ActiveSheet.Cells(t7, i + 1).Value
 Next i
 ActiveSheet.Cells(t7, 1).Select
End Sub
これを入れとけば、右クリックでも行番号入力でもいけます。

>UserForm1.の行でやはりエラーが出ました。
のコードを記載してくれれば的確な答えが返ってきます。

ここまで理解できれば、TextBoxの情報を吐き出す方のマクロは自作できるはず   です  多分。

*1. 話がかみ合ってるかちょっと不安…。
*2. ローカルウインドウが表示されていますか?(変数の確認に便利)
*3. でんでんさらっとじゃねえし...。(わたしはVBAが楽しくてしょうがないんで)

By わいわい39&359/365

【55969】Re:選択複数セルのデータ取得
発言  おじさん46  - 08/5/26(月) 23:04 -

引用なし
パスワード
   わいわいさんへ

ありがとうございます。
話はかみ合っていますよ。大丈夫です。
ローカルウインドウは表示していません。
わかっていませんでした。開いて見たんですがよくわかりませんでした。
(行番号を右クリックしたときエラーが出たので。)
デバッグについてもう一度本を読んで勉強します。
楽しいことは良いことです。「好きこそものの上手なり」と言います。

TextBox7での動作は良好です。
もうひとつ
A列を右クリックすると
For Each r In Target.Offset(, 1).Resize(, 6)が黄色になりました。
実行時エラー'1004':
アプリケーション定義またはオブジェクト定義のエラーです。
Target.Ofset(<1).Re...=<アプリケーシーン定義またはオフジェクト定義のエラ…
などの表示がありました。ローカルウインドウの内容はよくわかりません。

すみません、また連絡します。今日はこれで。

【55970】Re:選択複数セルのデータ取得
発言  わいわい  - 08/5/27(火) 9:07 -

引用なし
パスワード
   おじさん46 さん
>A列を右クリックすると
すみません。
*正 :ユーザーフォームに取り込みたい行 ・例(B10:G10)のセルA(A10)
を右クックしてください。

となると、ここもエラー回避をしなければ・・・。

>楽しいことは良いことです。「好きこそものの上手なり」と言います。
私の場合 「下手の横・・」   です。  

【55977】Re:選択複数セルのデータ取得
発言  おじさん46  - 08/5/27(火) 20:25 -

引用なし
パスワード
   わいわいさんへ

素晴らしいです。気持ちがいいくらい開きます。
ありがとうございます。

自分なりに復習します。

そして、次のスッテプTextBoxからのシートへ書き込みと、
できれば同時に別シートの規定様式で印刷が出来るように考えます。

【56032】Re:選択複数セルのデータ取得
発言  おじさん46  - 08/5/29(木) 23:09 -

引用なし
パスワード
   わいわいさんへ

一応思っていた動作ができるようになりました。

Private Sub CommandButton2_Click()
Dim x As Date
  For x = 1 To 10000
    If Worksheets("Sheet3").Cells(5 + x, 2).Value = "" Then
    
      Worksheets("Sheet3").Cells(5 + x, 2).Value = TextBox1.Text
      Worksheets("Sheet3").Cells(5 + x, 3).Value = Now
      
      Worksheets("Sheet3").Cells(5 + x, 4).Value = TextBox3.Text
      Worksheets("Sheet3").Cells(5 + x, 5).Value = TextBox4.Text
      Worksheets("Sheet3").Cells(5 + x, 6).Value = TextBox5.Text
      Worksheets("Sheet3").Cells(5 + x, 7).Value = TextBox6.Text
      
     Exit For
     End If
   Next

       Worksheets("Sheet4").Cells(16, 2).Value = TextBox1.Text
       Worksheets("Sheet4").Cells(2, 3).Value = Now
       Worksheets("Sheet4").Cells(5, 2).Value = TextBox3.Text
       Worksheets("Sheet4").Cells(5, 4).Value = TextBox4.Text
       Worksheets("Sheet4").Cells(5, 7).Value = TextBox5.Text
       Worksheets("Sheet4").Cells(5, 5).Value = TextBox6.Text
  
    Worksheets("Sheet4").PrintOut
  
   TextBox1.Text = ""
   TextBox2.Text = ""
   TextBox3.Text = ""
   TextBox4.Text = ""
   TextBox5.Text = ""
   TextBox6.Text = ""
   TextBox7.Text = ""
      
   UserForm1.Hide

End Sub

です。
改善のアドバイスをお願いします。

【56041】Re:選択複数セルのデータ取得
発言  Abebobo  - 08/5/30(金) 10:46 -

引用なし
パスワード
   おじさん46さん こんにちは

一点目
Dim x As Date ← の x はカウンターなので
long型かinteger型のほうが良いと
neptuneさんに教えていただいたばかりですよ(○`ε´○)

二点目
If Worksheets("Sheet3").Cells(5 + x, 2).Value = "" Then

 Worksheets("Sheet3").Cells(5 + x, 2).Value = TextBox1.Text
 Worksheets("Sheet3").Cells(5 + x, 3).Value = Now
            ・
            ・

With Worksheets("Sheet3")
    If .Cells(5 + x, 2).Value = "" Then
      .Cells(5 + x, 2).Value = TextBox1.Text
      .Cells(5 + x, 3).Value = Now
            ・
            ・
End With

と With でまとめたほうがすっきりします。

三点目
Worksheets("Sheet3").Cells(5 + x, 2).Value = ""
の時、10000行にユーザーフォームの情報を転記すると思いきや、
Exit For って? Range("B9").End(xlDown).Offset(1, 0) をご存知なのに、この方法を取ったんですよね。ちょっと、勘違いしそうなコードのような気がします。
シートレイアウトがわからないのでなんとも言い様がないのですが・・・。


冒頭の ”わいわいさんへ” は私のレスに対する回答以外はやめたほうがよろしいかと。
ここは私より知識も経験もずっと上の方々がいっぱいいます。そして、おじさん46さんを応援してくださる方もいっぱいいるはずです。
でも、きっと私に気を使ってくださったのでしょう。ありがとうございます。

先日、私よりずっと前に わいわい をHNにされている方がいましたので、HN代えました。 よく確認せずにわいわいを名乗ってました。わいわいさんすみませんでした。

【56044】Re:選択複数セルのデータ取得
回答  neptune  - 08/5/30(金) 11:34 -

引用なし
パスワード
   ▼Abebobo さん:
おじさん46さん こんにちは

一例です。同じロジックですが、扱い易くなっていると思います。
'/////////////UserFormモジュー//////////////
Option Explicit
'Collectionを使用する
Private mCol As Collection

Private Sub UserForm_Initialize()
  Set mCol = New Collection
  With Me
    mCol.Add .TextBox1
    mCol.Add .TextBox2
    mCol.Add .TextBox3
    mCol.Add .TextBox4
    mCol.Add .TextBox5
    mCol.Add .TextBox6
    mCol.Add .TextBox7
  End With
End Sub

Private Sub CommandButton1_Click()
Dim x As Long
  For x = 1 To 10000
    With Worksheets("Sheet3")
      If .Cells(5 + x, 2).Value = "" Then
        .Cells(5 + x, 2).Value = mCol.Item(2).Text
        .Cells(5 + x, 3).Value = Now
        .Cells(5 + x, 4).Value = mCol.Item(4).Text
        .Cells(5 + x, 5).Value = mCol.Item(5).Text
        .Cells(5 + x, 6).Value = mCol.Item(6).Text
        .Cells(5 + x, 7).Value = mCol.Item(7).Text
         Exit For
      End If
    End With
  Next
  
  With Worksheets("Sheet4")
     .Cells(16, 2).Value = mCol.Item(1).Text
     .Cells(2, 3).Value = Now
     .Cells(5, 2).Value = mCol.Item(3).Text
     .Cells(5, 4).Value = mCol.Item(4).Text
     .Cells(5, 7).Value = mCol.Item(5).Text
     .Cells(5, 5).Value = mCol.Item(6).Text
  End With
  Worksheets("Sheet4").PrintOut
  'TextBoxのクリアは外に追い出す(可読性、メンテナンス性)
  Call ClearText
  UserForm1.Hide

End Sub

'TextBoxをクリアするだけのプロシージャ
Private Sub ClearText()
  Dim i As Long
  For i = 1 To 7
    mCol.Item(i).Text = ""
  Next i
End Sub


Private Sub UserForm_Terminate()
  Set mCol = Nothing
End Sub

ちなみにこれ以上TextBoxが多くなると使い方にもよりますが、多分
私もClassを使うと思います。

興味があれば、「Collection Class」をキーワードに過去ログを検索してみて下さい。
サンプル、情報があります。

>先日、私よりずっと前に わいわい をHNにされている方がいましたので、
>HN代えました。 よく確認せずにわいわいを名乗ってました。
>わいわいさんすみませんでした。
やはりそうでしたか!なんか違うかなとは感じてましたので。納得 ^ ^;

【56047】Re:選択複数セルのデータ取得
発言  Abebobo  - 08/5/30(金) 13:37 -

引用なし
パスワード
   neptune さんこんにちは。

>やはりそうでしたか!なんか違うかなとは感じてましたので。納得 ^ ^;

07年8月位までが、紳士で知識のあるわいわいさんで、今年の1月からが私でした。
過去ログは見ていたつもりですので、一度はわいわいさんの名前を目にしていたはずだったんですが...。いずれにせよ わいわいさんには申し訳なかったです。

Collection Class ちょっと難しそう...。 勉強してギブアップしそうになったら質問させていただくかも知れませんが、そのときはよろしくお願いします。

【56049】Re:選択複数セルのデータ取得
発言  VBWASURETA  - 08/5/30(金) 14:10 -

引用なし
パスワード
   皆さんこんにちは。

先週まで仕事のプロジェクトで大火事から、
ようやく小火になって戻ってきました。

元質問と違うようですが、IE7は入れるな警告前にWindowsアップデートしたら
入ってしまいました・・・

で、今のところは問題ないです。
XPのSP2なので、SP3入れないようにしないと・・・

後IE7で問題になりそうなのはネットメールに影響が結構あるみたいです。
例えばデスクネッツ、サイボウズ等

内容は受信途中で止るとからしいです。
質問と違う話を継続してすみません^^;

【56057】Re:選択複数セルのデータ取得
発言  おじさん46  - 08/5/30(金) 20:12 -

引用なし
パスワード
   みなさんへ

大変多くのアドバイスを戴きまして、ありがとうございます。
印刷してじっくり読んで見ます。
また質問します。

【56062】Re:選択複数セルのデータ取得
発言  おじさん46  - 08/5/31(土) 13:41 -

引用なし
パスワード
   皆さん こんにちは

がんばって修正しました。
見てください。

Private Sub TextBox7_AfterUpdate()
Dim t7 As Long
Dim i  As Long
  t7 = Me.TextBox7.Text
  i = 1
    For i = 1 To 6
    Me.Controls("textbox" & i).Text = ActiveSheet.Cells(t7, i + 1).Value
    Next i
    ActiveSheet.Cells(t7, 1).Select
 
  TextBox7.SetFocus
 
End Sub

Private Sub CommandButton2_Click()

  Worksheets("sheet3").Activate
    With Range("B5").End(xlDown)
      .Offset(1, 0).Value = TextBox1.Value
      .Offset(1, 1).Value = Now
      .Offset(1, 2).Value = TextBox3.Value
      .Offset(1, 3).Value = TextBox4.Value
      .Offset(1, 4).Value = TextBox5.Value
      .Offset(1, 5).Value = TextBox6.Value
    End With
      
    With Worksheets("Sheet4")
       .Cells(16, 2).Value = TextBox1.Text
       .Cells(2, 3).Value = Now
       .Cells(5, 2).Value = TextBox3.Text
       .Cells(5, 4).Value = TextBox4.Text
       .Cells(5, 7).Value = TextBox5.Text
       .Cells(5, 5).Value = TextBox6.Text
    End With
    
  Worksheets("Sheet4").PrintOut
  
   TextBox1.Text = ""
   TextBox2.Text = ""
   TextBox3.Text = ""
   TextBox4.Text = ""
   TextBox5.Text = ""
   TextBox6.Text = ""
   TextBox7.Text = ""
      
   UserForm1.Hide

End Sub

です。

TextBoxのクリアはうまくまとめられませんでした。
休憩して再チャイレンジします。

【56074】Re:選択複数セルのデータ取得
発言  neptune  - 08/5/31(土) 22:33 -

引用なし
パスワード
   ▼おじさん46 さん:
頑張ってますね。
気づいた点だけ。

>Private Sub TextBox7_AfterUpdate()
>Dim t7 As Long
>Dim i  As Long
>  t7 = Me.TextBox7.Text
>  i = 1
>    For i = 1 To 6
>    Me.Controls("textbox" & i).Text = ActiveSheet.Cells(t7, i + 1).Value
>    Next i
for句の処理のところにインデントがないので判りにくい。
>    ActiveSheet.Cells(t7, 1).Select
ActiveSheetを使用しているが、ActiveSheetが目的のシートである事は
保障されているのか?

> 
>  TextBox7.SetFocus
> 
>End Sub

>TextBoxのクリアはうまくまとめられませんでした。
これがちょっと意味がわかりませんが、自分の目的通りに動作すれば
それはそれで良いプログラムと思いますよ。背伸びせずに
自分の理解の範囲で作成すればよいと思います。

スキルが上がってその時点で気が付いたら、より高度な手法を使えば
良いのですから。

後、大きなお世話かもしれませんが、
・セルにデータを入力してますが、そのデータが正当なデータである事は
 確認してますか。ここに書いてないだけとは思いますが、もし、
 業務に使うなら必須です。
・コメントは書いておくほうが良いですね。半年たてばすっかり忘れて
 しまいますから、他人が書いたプログラムを眺めているような感じに
 なります。後で眺めるときに助かります。


#自分の理解の範囲で出来るものならそれが一番良いです。
不具合、改造の必要が出た時など、理解しているのでそれらが容易で
結局自分の為になります。出来なかったら悲惨です。

【56081】Re:選択複数セルのデータ取得
お礼  おじさん46  - 08/6/1(日) 9:30 -

引用なし
パスワード
   ありがとうございます。

自分のペースで、仕事が楽になる様に工夫して行きたいと思います。
面白味がわかって来た感じです。楽しいです。

また、お願いします。

4536 / 13646 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free