Excel VBA質問箱 IV

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

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


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

【53582】ユーザーボックスについて りの 08/1/23(水) 13:25 質問[未読]
【53583】Re:ユーザーボックスについて ハチ 08/1/23(水) 16:06 発言[未読]
【53584】Re:ユーザーボックスについて りの 08/1/23(水) 16:41 質問[未読]
【53586】Re:ユーザーボックスについて ハチ 08/1/23(水) 18:39 発言[未読]
【53880】Re:ユーザーボックスについて りの 08/2/13(水) 16:15 質問[未読]
【53887】Re:ユーザーボックスについて ハチ 08/2/13(水) 18:37 回答[未読]
【53913】Re:ユーザーボックスについて りの 08/2/14(木) 17:04 質問[未読]
【53916】Re:ユーザーボックスについて ハチ 08/2/14(木) 21:36 回答[未読]
【53954】Re:ユーザーボックスについて りの 08/2/18(月) 10:12 質問[未読]
【53956】Re:ユーザーボックスについて ハチ 08/2/18(月) 10:47 回答[未読]
【53988】Re:ユーザーボックスについて りの 08/2/19(火) 16:44 質問[未読]
【53991】Re:ユーザーボックスについて ハチ 08/2/19(火) 17:08 発言[未読]
【53992】Re:ユーザーボックスについて りの 08/2/19(火) 17:12 お礼[未読]
【54024】Re:ユーザーボックスについて ハチ 08/2/20(水) 12:32 発言[未読]
【54029】Re:ユーザーボックスについて りの 08/2/20(水) 15:35 質問[未読]
【54030】Re:ユーザーボックスについて ハチ 08/2/20(水) 15:48 発言[未読]
【54031】Re:ユーザーボックスについて りの 08/2/20(水) 16:53 お礼[未読]
【54049】Re:ユーザーボックスについて りの 08/2/21(木) 17:35 質問[未読]
【54052】Re:ユーザーボックスについて ハチ 08/2/21(木) 19:44 発言[未読]
【54055】Re:ユーザーボックスについて りの 08/2/22(金) 8:29 お礼[未読]

【53582】ユーザーボックスについて
質問  りの  - 08/1/23(水) 13:25 -

引用なし
パスワード
   初めまして。
最近、VBAを勉強し始めました。
ネットを検索したり、マニュアルを買ったりしたのですが
初歩的な質問のせいか解らないので質問させて下さい。

まず、エクセルのシートで 『タイトル』 『入力画面』を作成しています。
Bookを開いた際、『タイトル』がアクティブになるように設定。
ユーザーフォームAを作って、『入力画面』に移り
ユーザーフォームBを表示させました。
以降、ユーザーフォームB内にあるコントロール(テキストボックス,
リストボックスから選択など)を使い
『入力画面』に反映させるように設定しました。

その後からが質問なんですが
・ユーザーフォームBにあるコマンドボタンで
 『入力画面』内にあるフォームに反映させた上で
 新しいシートを作成したい。
 (新しく名前を付けて保存 みたいな感じです)
・入力後は『入力画面』のフォームが空欄に戻したい。
 (これからも、データーが増えるからです)
・入力後のデータ内を変更する際に
 ユーザーフォームBに入力したフォームを呼び出して上書きで更新したい。

以上が、行いたい作業です。
作成したいマクロがアンケート用紙みたいに
固定のフォームがあり、項目別に入力する項(セル)が決まっているので
ユーザーフォームを使い入力したいのです。

どなたか解る方がいたら、教えて頂けると幸いです。

win:2000 Excel:2003SP1

【53583】Re:ユーザーボックスについて
発言  ハチ  - 08/1/23(水) 16:06 -

引用なし
パスワード
   ▼りの さん:

>以降、ユーザーフォームB内にあるコントロール(テキストボックス,
>リストボックスから選択など)を使い
>『入力画面』に反映させるように設定しました。

この部分と

>・ユーザーフォームBにあるコマンドボタンで
> 『入力画面』内にあるフォームに反映させた上で
> 新しいシートを作成したい。
> (新しく名前を付けて保存 みたいな感じです)

この部分で、質問の内容が良く解りません。
「入力画面」に反映までは完成していて、
「入力画面」のデータを元に新しいWorkSheetを作ることができない。

ということですか?

>・入力後は『入力画面』のフォームが空欄に戻したい。
> (これからも、データーが増えるからです)

入力箇所の件数によりますが、
初心者なら1つづつ消していくのが良いのでは?

>・入力後のデータ内を変更する際に
> ユーザーフォームBに入力したフォームを呼び出して上書きで更新したい。

ここも良く解りません。
「入力画面」にあるデータを再度、更新するときに
ユーザーフォームBに内容を引き渡したい ということですか?

>以上が、行いたい作業です。
>作成したいマクロがアンケート用紙みたいに
>固定のフォームがあり、項目別に入力する項(セル)が決まっているので
>ユーザーフォームを使い入力したいのです。

作成したシートをどうしたいのか?によりますが、
「印刷する為」「データとして規定フォーマットで提出が必要な為」の理由なら
自分だったら・・・

1、一覧表のWorkSheetを追加して、入力するべきデータを1行づつにまとめる
2、「入力画面」「ユーザーフォームB」からは一覧表のデータを更新する
3、すべてのデータが確定したら雛型のWorkSheetをコピー(印刷なら使い廻す)し、
  一覧表から各セルへデータを書き込む

とすると思います。

【53584】Re:ユーザーボックスについて
質問  りの  - 08/1/23(水) 16:41 -

引用なし
パスワード
   ▼ハチ さん

書き方が解り難くて申し訳ありませんでした。


>>以降、ユーザーフォームB内にあるコントロール(テキストボックス,
>>リストボックスから選択など)を使い
>>『入力画面』に反映させるように設定しました。

ユーザーフォームの入力により『入力画面』内の指定したセルに
記入する事は設定出来たという事です。

>>・ユーザーフォームBにあるコマンドボタンで
>> 『入力画面』内にあるフォームに反映させた上で
>> 新しいシートを作成したい。
>> (新しく名前を付けて保存 みたいな感じです)

ユーザーフォーム内の更新ボタンで、『入力画面』のシートを
完成させたいのですが、その際に名前を付けて保存で新しく
ワークシートを作りたいのです。
(『入力画面』はあくまでも、ベースフォームとして使用)

>>・入力後は『入力画面』のフォームが空欄に戻したい。
>> (これからも、データーが増えるからです)
>
>入力箇所の件数によりますが、
>初心者なら1つづつ消していくのが良いのでは?

そうですね、欲張り過ぎですね;

>>・入力後のデータ内を変更する際に
>> ユーザーフォームBに入力したフォームを呼び出して上書きで更新したい。

例えば、新しいワークシートを作成出来た場合なんですが
入力内容の変更がある可能性があるので
上書き更新出来るようにしたいのです。

>作成したシートをどうしたいのか?によりますが
>「印刷する為」「データとして規定フォーマットで提出が必要な為」の理由なら

印刷・データ提出・データベースとして必要です。
後々は、『目次』を作って検索機能をつけると
より、データーベース化が出来ると思いました。

作成したいのは、現場の検査シートで物件毎に必要な書類です。
出来るだけ、クリック作業・入力作業で終わらせたい理由は
組んだマクロをPC操作が苦手な上司が使うからです。
一時は、CGIやhtmlやJavaで作成しようと思ったのですが
バックアップが限られているし、検査シートには写真を貼り付けるので
自動更新が難しいと思ったのでマクロで出来ないかな?と思った次第です。

【53586】Re:ユーザーボックスについて
発言  ハチ  - 08/1/23(水) 18:39 -

引用なし
パスワード
   ▼りの さん:

すいません。ちょっと勘違いしてました。
『入力画面』はWorkSheetなのですね。
最初に書かれているのを見落としてました。

>ユーザーフォームの入力により『入力画面』内の指定したセルに
>記入する事は設定出来たという事です。

これをどうやってるのですか?
ControlSourceに設定してる とか
TextBox1.Value = Range("A1").Value とやってるとか


>ユーザーフォーム内の更新ボタンで、『入力画面』のシートを
>完成させたいのですが、その際に名前を付けて保存で新しく
>ワークシートを作りたいのです。
>(『入力画面』はあくまでも、ベースフォームとして使用)

簡単なサンプルなら、こんな感じです。
エラー処理は追加してください

'ActiveなWorkSheetを左端にコピーし名前を変更
Sub Test_Copy()
  Dim Ans As Variant
  
  Ans = InputBox("新しいWorkSheet名を入力")
  ActiveSheet.Copy Before:=Worksheets(1)
  On Error Resume Next
    Worksheets(1).Name = Ans
  On Error GoTo 0
  
End Sub

>>>・入力後は『入力画面』のフォームが空欄に戻したい。
>>> (これからも、データーが増えるからです)
>>
>>入力箇所の件数によりますが、
>>初心者なら1つづつ消していくのが良いのでは?
>
>そうですね、欲張り過ぎですね;

これはマクロの記録で
1、Ctrlを押しながら対象のセルを選択
2、Deleteキーを押下

で作れると思います。
>
>>>・入力後のデータ内を変更する際に
>>> ユーザーフォームBに入力したフォームを呼び出して上書きで更新したい。
>
>例えば、新しいワークシートを作成出来た場合なんですが
>入力内容の変更がある可能性があるので
>上書き更新出来るようにしたいのです。

更新したいSheetをどうやって指定するのか?などの条件が揃わないと
良い回答は付かないです。

>>作成したシートをどうしたいのか?によりますが
>>「印刷する為」「データとして規定フォーマットで提出が必要な為」の理由なら
>
>印刷・データ提出・データベースとして必要です。
>後々は、『目次』を作って検索機能をつけると
>より、データーベース化が出来ると思いました。

どのようなデータベースなのかによりますが、
データは一覧(表ですね)にしてレコードで管理できるようにしたほうが、
後々良さそうですがすぐには難しそうですね。

>
>作成したいのは、現場の検査シートで物件毎に必要な書類です。
>出来るだけ、クリック作業・入力作業で終わらせたい理由は
>組んだマクロをPC操作が苦手な上司が使うからです。
>一時は、CGIやhtmlやJavaで作成しようと思ったのですが

このあたりの知識(プログラムに対する考え方というか)は、
ある方だと思ってレスすれば良いですか?

【53880】Re:ユーザーボックスについて
質問  りの  - 08/2/13(水) 16:15 -

引用なし
パスワード
   ▼ハチ さん:
返信遅くなって申し訳ありません。
出張中でエクセルに触る事が出来ませんでした;;

ハチさんが仰ってたように、ユーザーフォームから入力して
項目毎のリストを作ってみました。
ユーザーフォームは 『更新』 『削除』 『閉じる』のボタンを作り
rcd.Offset(0, 1).Value = **.Value というように
新規の入力物件があると追加される形にしました。
既に入力した物件は、セルに文字の定義を行い呼び出せるようにしました。

一覧表のレコードが出来たので、その項目を定型のシートのセルに反映するように
設定したいのですが出来るでしょうか?
出来れば、リストに追加すると新規で定型シートが追加出来て
既に入力したリスト内の項目を変更した時も反映させたいです。

前もって、シートを作成しておいてからセル毎に
リンクさせようかと思ったのですが、新しいシートを作る毎に
リンク設定が必要ですよね?

色々、お聞きして申し訳ございません。

【53887】Re:ユーザーボックスについて
回答  ハチ  - 08/2/13(水) 18:37 -

引用なし
パスワード
   ▼りの さん:
>
>ユーザーフォームは 『更新』 『削除』 『閉じる』のボタンを作り
>rcd.Offset(0, 1).Value = **.Value というように
>新規の入力物件があると追加される形にしました。
>既に入力した物件は、セルに文字の定義を行い呼び出せるようにしました。

一覧表へデータ処理は完成した と解釈して良いですね?

>一覧表のレコードが出来たので、その項目を定型のシートのセルに反映するように
>設定したいのですが出来るでしょうか?

これはYesNoなら、Yesです。

>出来れば、リストに追加すると新規で定型シートが追加出来て
>既に入力したリスト内の項目を変更した時も反映させたいです。
>前もって、シートを作成しておいてからセル毎に
>リンクさせようかと思ったのですが、新しいシートを作る毎に
>リンク設定が必要ですよね?

雛型のシートを作成しておいて名前をつけてコピーする方法は、
前回のレスで書いてますので、参考にしてください。

その後の処理は・・とりあえず2案
案1
セルの参照で一覧表を参照するようにしておく。
セルの参照もマクロで打ち込む。
VLOOKUP関数を使う手もあると思います。
データ量が多くなるなら重くなるかも。

案2
Worksheet_Changeイベントで指定のシートの値を書き換える

【53913】Re:ユーザーボックスについて
質問  りの  - 08/2/14(木) 17:04 -

引用なし
パスワード
   ▼ハチ さん:
>一覧表へデータ処理は完成した と解釈して良いですね?

はい、以下のようなプロシージャーをユーザーボックス内に作り
データ管理して表示されるようにしました。

'表示レコード変更用プロシージャ
Private Sub ComboBox1_Change()
  Dim No As Variant
  Dim rcd As Range
  Dim pName As String
  No = ComboBox1.Value
  Set rcd = Range("番号").Find(What:=No, _
    LookAt:=xlWhole)
  A.Value = rcd.Offset(0, 1).Value
  B.Value = rcd.Offset(0, 2).Value
  C.Value = rcd.Offset(0, 3).Value
  D.Value = rcd.Offset(0, 4).Value
  E.Value = rcd.Offset(0, 5).Value
  F.Value = rcd.Offset(0, 6).Value
  G.Value = rcd.Offset(0, 7).Value
  H.Value = rcd.Offset(0, 8).Value
  I.Value = rcd.Offset(0, 9).Value
  J.Value = rcd.Offset(0, 10).Value
  K.Value = rcd.Offset(0, 11).Value
  L.Value = rcd.Offset(0, 12).Value
  M.Value = rcd.Offset(0, 13).Value
  N.Value = rcd.Offset(0, 14).Value
  O.Value = rcd.Offset(0, 15).Value
  P.Value = rcd.Offset(0, 16).Value
  Q.Value = rcd.Offset(0, 17).Value
  R.Value = rcd.Offset(0, 18).Value
  S.Value = rcd.Offset(0, 19).Value
  T.Value = rcd.Offset(0, 20).Value
  U.Value = rcd.Offset(0, 22).Value
  If rcd.Offset(0, 21).Value = "良" Then
    OptionButton1.Value = True
  ElseIf rcd.Offset(0, 21).Value = "不可" Then
    OptionButton2.Value = True
  Else
    OptionButton1.Value = False
    OptionButton2.Value = False
  End If
End Sub

'「更新」ボタンのプロシージャ
Private Sub CommandButton2_Click()
  Dim No As Variant
  Dim rcd As Range
  No = ComboBox1.Value
  Set rcd = Range("番号").Find(What:=No, _
    LookAt:=xlWhole)
    
  If No = "新規" Then
    rcd.EntireRow.Insert
    Set rcd = rcd.Offset(-1)
    rcd.Value = rcd.Offset(-1).Value + 1
  End If
  rcd.Offset(0, 1).Value = A.Value
  rcd.Offset(0, 2).Value = B.Value
  rcd.Offset(0, 3).Value = C.Value
  rcd.Offset(0, 4).Value = D.Value
  rcd.Offset(0, 5).Value = E.Value
  rcd.Offset(0, 6).Value = F.Value
  rcd.Offset(0, 7).Value = G.Value
  rcd.Offset(0, 8).Value = H.Value
  rcd.Offset(0, 9).Value = I.Value
  rcd.Offset(0, 10).Value = J.Value
  rcd.Offset(0, 11).Value = K.Value
  rcd.Offset(0, 12).Value = L.Value
  rcd.Offset(0, 13).Value = M.Value
  rcd.Offset(0, 14).Value = N.Value
  rcd.Offset(0, 15).Value = O.Value
  rcd.Offset(0, 16).Value = P.Value
  rcd.Offset(0, 17).Value = Q.Value
  rcd.Offset(0, 18).Value = R.Value
  rcd.Offset(0, 19).Value = S.Value
  rcd.Offset(0, 20).Value = T.Value
  rcd.Offset(0, 22).Value = U.Value
  If OptionButton1.Value Then
     rcd.Offset(0, 21).Value = "良"
  ElseIf OptionButton2.Value Then
     rcd.Offset(0, 21).Value = "不可"
  End If
  If No = "新規" Then
     ComboBox1.Value = rcd.Value
     ComboBox1.RowSource = "番号"
  End If
End Sub

'「削除」ボタンのプロシージャ
Private Sub CommandButton1_Click()
  Dim cCount As Integer
  cCount = Range("番号").Cells.Count - 1
  If cCount = 1 Then
    MsgBox "このレコードは削除できません"
    Exit Sub
  End If
  If MsgBox("このレコードを削除していいですか?", _
    vbYesNo) = vbYes Then
    ComboBox1.RowSource = ""
    Range("番号").Find(What:=ComboBox1.Value, _
      LookAt:=xlWhole).EntireRow.Delete
    If ComboBox1.Value = cCount Then
      ComboBox1.Value = ComboBox1.Value - 1
    Else
      ComboBox1.Value = ComboBox1.Value + 1
    End If
    ComboBox1.RowSource = "番号"
  End If
End Sub

'「閉じる」ボタンのプロシージャ
Private Sub CommandButton3_Click()
  Me.Hide
End Sub

Private Sub UserForm1_Initialize()
  ComboBox1.Value = 1
End Sub

【データシート】
     A    B     C    D
1   リンゴ  みかん  スイカ  イチゴ
新規

ココの範囲を(番号)リンゴの所は(リスト)で定義をかけています。

『作りたいマクロ』
上記のデータシート(以下、AAシートとします)内のデータを
定型のシート(以下、BBシート)にリンクして、出来上がった定型シートを
名前を付けて保存したいと思っています(以下、CCシート)。
1番のそれぞれのセルがBBシートにリンクをさせて1番CCシート作成。
また、AAシートで2番を作った際にも2番CCシートを作成させて
データが増えるのに従ってCCシートが追加されるような形です。
なので、AAシートの1番を変更すると1番CCシートの値も変わるような
そのようなマクロを作りたいです。

セルの参照でネットを探してみたんですがみつかりません。
シート内の参照や、シート間の参照は見つかりましたが
私のように、AAシートでオフセット機能を使い
番号でデータ管理をしているのがない為です。
Valueで参照しようと思ったのですが、既にValueを使っていても
Valueでコピー機能は使えるんでしょうか?
もし、使えるようならAAシートでオフセット追加しているようなデータは
どのように指定すれば宜しいのでしょうか?
コピー先のBBシートに参照するセルは固定で決まっています。

=で貼り付けてみたんですが、AAシートでリストを新規作成すると
エラーが出てきます…。

面倒くさい事を色々と質問して申し訳ございません。

【53916】Re:ユーザーボックスについて
回答  ハチ  - 08/2/14(木) 21:36 -

引用なし
パスワード
   ▼りの さん:

帰り際なので、頭が回ってないですが・・・
間違ってたらスイマセン

とりあえず、関数で行うパターンで書きます。

参照したいシート(CCシートですかね?)の
A1セルを作業セルとして、該当の数値を入力する。

表示したい箇所に下記の関数を入れる。
=OFFSET(INDEX(番号,MATCH($A$1,番号,1)),0,1)

これで表示されますか?

>'「閉じる」ボタンのプロシージャ
>Private Sub CommandButton3_Click()
>  Me.Hide
>End Sub

「閉じる」の意味なら、Unloadでは?

>【データシート】
>     A    B     C    D
>1   リンゴ  みかん  スイカ  イチゴ
>新規
>↑
>ココの範囲を(番号)リンゴの所は(リスト)で定義をかけています。

ここの(リスト)の名前の定義は、今回使いませんでした。

(リスト)の範囲を(番号)の範囲まで広げてもらえる(A列から)と
VLOOKUP関数で一発で取り出せるようになると思います。

A1に番号を作業セルとして数値を入力
=VLOOKUP($A$1,リスト,2,1)

ちなみに名前の定義の範囲は重複していても、問題ありません。
この例では、A列は (番号)(リスト)の両方の名前で呼び出せる範囲となります。

>Valueで参照しようと思ったのですが、既にValueを使っていても
>Valueでコピー機能は使えるんでしょうか?

ここの意味はちょっとわかりません。

A.Value = rcd.Offset(0, 1).Valueの意味は、
Aの値に rcd.Offset(0, 1)の値 を代入する です。
代入は複数回やっても大丈夫です(回答になってない?)

>=で貼り付けてみたんですが、AAシートでリストを新規作成すると
>エラーが出てきます…。
>
>面倒くさい事を色々と質問して申し訳ございません。

そんなことはないですよ^^
頑張って考えているのが、十分に伝わりますので、
自分のわかる範囲であれば、回答するつもりです。

【53954】Re:ユーザーボックスについて
質問  りの  - 08/2/18(月) 10:12 -

引用なし
パスワード
   ▼ハチ さん:

>(リスト)の範囲を(番号)の範囲まで広げてもらえる(A列から)と
>VLOOKUP関数で一発で取り出せるようになると思います。

解り難くにてスミマセン。
(リスト)の範囲は、(番号)の範囲まで広げて定義をかけています。

>A1に番号を作業セルとして数値を入力
>=VLOOKUP($A$1,リスト,2,1)

この場合、リストは貼り付けたい別シートにあるんですが
如何したら良いんでしょうか?
>=VLOOKUP($A$1,リスト,2,1)

【53956】Re:ユーザーボックスについて
回答  ハチ  - 08/2/18(月) 10:47 -

引用なし
パスワード
   ▼りの さん:

>(リスト)の範囲は、(番号)の範囲まで広げて定義をかけています。

>この場合、リストは貼り付けたい別シートにあるんですが
>如何したら良いんでしょうか?
>>=VLOOKUP($A$1,リスト,2,1)

問題ありません。ちゃんと参照できるはずです。
関数、間違ってました。スイマセン
=VLOOKUP($A$1,リスト,2,0) ですね。

新規Bookで下記のSampleでサンプルデータを作成して、
2枚目のWorkSheet A1セルの値を変更してみてください。

Sub Sample()
  With Worksheets(1)
    .Range("A1:C1").Value = Array(1, "B1", "C1")
    .Range("A1:C1").AutoFill .Range("A1:C15")
    .Range("A1:C15").Name = "リスト"
  End With
  
  With Worksheets(2)
    .Range("A1").Value = 1
    .Range("B2").Formula = "=VLOOKUP($A$1,リスト,2,0)"
    .Range("C3").Formula = "=VLOOKUP($A$1,リスト,3,0)"
  End With
  
End Sub

【53988】Re:ユーザーボックスについて
質問  りの  - 08/2/19(火) 16:44 -

引用なし
パスワード
   ▼ハチ さん:

>=VLOOKUP($A$1,リスト,2,0) ですね。

=VLOOKUP(リストがあるシート名!A2,リスト,2,0)を使って
シートに貼り付ける事が出来ました。
これでも良かったのでしょうか?

ハチさんの関数
=VLOOKUP($A$1,リスト,2,0)を使うとエラー表示が出てしまいます。

VLOOKUP関数の意味として
(番号の場所,定義の付いた範囲,表示させたい列,FALSE)と理解して良いですか?

【53991】Re:ユーザーボックスについて
発言  ハチ  - 08/2/19(火) 17:08 -

引用なし
パスワード
   ▼りの さん:
>=VLOOKUP(リストがあるシート名!A2,リスト,2,0)を使って
>シートに貼り付ける事が出来ました。
>これでも良かったのでしょうか?
>
>ハチさんの関数
>=VLOOKUP($A$1,リスト,2,0)を使うとエラー表示が出てしまいます。

自分の説明の仕方がマズかったですね。すいません。

Sampleを動かして、意味は伝わりましたか?
表示したいシートに
作業セルとして番号を保持するセルを作ると
やりやすいかなぁと思って書きました。

そうすると表示するシートの内容は、
作業セルの値だけ変更すれば良いと思います。

りの さんが、実装したい機能に近づいているのなら、
その関数でも問題ないと思いますよ。

>VLOOKUP関数の意味として
>(番号の場所,定義の付いた範囲,表示させたい列,FALSE)と理解して良いですか?

番号の場所 というより、
対象の番号か入力されている場所 ですかね。

【53992】Re:ユーザーボックスについて
お礼  りの  - 08/2/19(火) 17:12 -

引用なし
パスワード
   ▼ハチ さん:
とりあえず
=VLOOKUP(リストがあるシート名!A2,リスト,2,0)を使って
対処してみたいと思います。
色々と有難うございました。
また、何かありましたら宜しくお願い致します。

【54024】Re:ユーザーボックスについて
発言  ハチ  - 08/2/20(水) 12:32 -

引用なし
パスワード
   >Sampleを動かして、意味は伝わりましたか?
>表示したいシートに
>作業セルとして番号を保持するセルを作ると
>やりやすいかなぁと思って書きました。

上手く伝わらなかったのが、歯がゆい(自己満足です)ので、
サンプルを作り直しました。
ヒマだったら試してみてください。

新規BookでSample2を実行
出来上がったBookで
"一覧"Sheetのデータを編集すると、
該当する"名前x"Sheetの表示が変わる ということです。

Option Explicit

Sub Sample2()
  Dim Rng As Range
  Dim i As Integer
  
  'WorkSheetの初期枚数補正
  Do Until Worksheets.Count >= 2
    Worksheets.Add
  Loop
  Do Until Worksheets.Count = 2
    Application.DisplayAlerts = False
      Worksheets(1).Delete
    Application.DisplayAlerts = True
  Loop
  '一覧データ作成
  With Worksheets(1)
    .Range("A1:D1").Value = _
    Array(1, "名前1", "data1-1", "data2-1")
    .Range("A1:D1").AutoFill .Range("A1:D15")
    .Range("A1:D15").Name = "リスト"
    .Name = "一覧"
  End With
  '雛型Sheet作成
  With Worksheets(2)
    .Range("A1").Value = 0
    .Range("B2").Formula = "=VLOOKUP($A$1,リスト,3,0)"
    .Range("C3").Formula = "=VLOOKUP($A$1,リスト,4,0)"
    .Name = "雛型"
  End With
  
  'リスト分のWorkSheetを作成
  i = Worksheets.Count
  For Each Rng In Worksheets("一覧").Range("A1:A15")
    Worksheets("雛型").Copy After:=Worksheets(i)
    i = i + 1
    With Worksheets(i)
      .Range("A1").Value = Rng.Value
      .Name = Rng.Offset(, 1).Value
    End With
  Next
 
End Sub

【54029】Re:ユーザーボックスについて
質問  りの  - 08/2/20(水) 15:35 -

引用なし
パスワード
   ▼ハチ さん:
わざわざ、サンプルまで作って頂いて有難うございます。
そこで質問なんですが…


>Array(1, "名前1", "data1-1", "data2-1")

の記述は、元になるリスト内のデータと考えて良いですか?
(一覧シートのA1:D1のセルの値)

【54030】Re:ユーザーボックスについて
発言  ハチ  - 08/2/20(水) 15:48 -

引用なし
パスワード
   ▼りの さん:
>>Array(1, "名前1", "data1-1", "data2-1")
>
>の記述は、元になるリスト内のデータと考えて良いですか?
>(一覧シートのA1:D1のセルの値)

この部分のコードの意味がわからない ということですか?

.Range("A1:D1").Value = Array(1, "名前1", "data1-1", "data2-1")
A1:D1の値に 一次配列(1, "名前1", "data1-1", "data2-1") を代入

.Range("A1:D1").AutoFill .Range("A1:D15")
"A1:D1"を15行目までフィルでコピー

これで、"一覧"WorkSheetのサンプルデータを作ってます。

【54031】Re:ユーザーボックスについて
お礼  りの  - 08/2/20(水) 16:53 -

引用なし
パスワード
   ▼ハチ さん:

>.Range("A1:D1").Value = Array(1, "名前1", "data1-1", "data2-1")
>A1:D1の値に 一次配列(1, "名前1", "data1-1", "data2-1") を代入
>
>.Range("A1:D1").AutoFill .Range("A1:D15")
>"A1:D1"を15行目までフィルでコピー
>
>これで、"一覧"WorkSheetのサンプルデータを作ってます。

セルに直接、入力している訳じゃないんですよね。
解りました。
自分の作ったマクロで試してみたいと思います。
有難うございました。

【54049】Re:ユーザーボックスについて
質問  りの  - 08/2/21(木) 17:35 -

引用なし
パスワード
   ▼ハチ さん:
度々、申し訳ございません。
ハチさんに作って頂いた、サンプルマクロの動き方は解ったのですが
自分のマクロに反映させようとすると、イマイチ解りません。

>.Range("A1:D1").Value = Array(1, "名前1", "data1-1", "data2-1")
>A1:D1の値に 一次配列(1, "名前1", "data1-1", "data2-1") を代入

の所なんですが、私が作っているマクロはユーザーフォームを使って
リストが作成・変更・削除されるという形式なんで
代入するという形を、どう変更して良いのか解りません。

現在は雛形シートに関数を入れて、シートのコピーをして
随時、そのシートのセルの関数を変更しているのですが
上司は理解不可能っぽいです…。
(ちなみに上司は、PCも片手1本打ち…)

【54052】Re:ユーザーボックスについて
発言  ハチ  - 08/2/21(木) 19:44 -

引用なし
パスワード
   ▼りの さん:

>度々、申し訳ございません。
>ハチさんに作って頂いた、サンプルマクロの動き方は解ったのですが
>自分のマクロに反映させようとすると、イマイチ解りません。
>
>>.Range("A1:D1").Value = Array(1, "名前1", "data1-1", "data2-1")
>>A1:D1の値に 一次配列(1, "名前1", "data1-1", "data2-1") を代入
>
>の所なんですが、私が作っているマクロはユーザーフォームを使って
>リストが作成・変更・削除されるという形式なんで
>代入するという形を、どう変更して良いのか解りません。

そのままで良いと思います。
データを更新するモジュールはそのまま使ってください。

このSample2は、VLOOKUP関数の動作を説明したくて作ったものです。
今のマクロに組み込んで使うようなものではないです。

このSample2で作った"雛型"のような形式にすれば
"雛型"のA1セルの番号を入力してコピーするだけで、
各シートの関数は変更せずにシートが出来ますよ。 

と言いたかったんですが、
余計に混乱したっぽいですね・・・すいません。
忘れてください。

【54055】Re:ユーザーボックスについて
お礼  りの  - 08/2/22(金) 8:29 -

引用なし
パスワード
   ▼ハチ さん:
>余計に混乱したっぽいですね・・・すいません。
>忘れてください。

いいえ、こちらこそ御丁寧に教えて下さって有難うございました。
ハチさんのお陰で関数の理解が出来ました。

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