[[20071204095922]] 『データ入力について』(H.I) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『データ入力について』(H.I)
お尋ねします。sheet1からsheet2へのデータ入力をスムーズにするためにsheet1にコンボボックスを設定してそこで1組から6組までのクラスを選択し、その隣にリストボックスを設定して、例えばコンボボックスで2組を選択すると自動的にリストボックスに2組の生徒氏名が表示されるようにして選択したデータがsheet2に表示されるようにするにはどのようにしたら良いのでしょうか。初心者なものでよろしくお願いします。
(XP. 2002)


 1) 各組生徒の名簿はどのようになっているのでしょう?
 2) リストボックスからの選択は、単数・複数 のどちらでしょう?
 3) 選択されたリストボックスの項目を「どこへ、どのように」表示させるのでしょう?
 (seiya)

すいません。情報不足でした。 名簿は単純に1組はa1〜a40に出席番号b1〜b2に氏名で以下同様に2組から6組まで1組のあとに続いてあります。
選択は生徒1名ずつです。リストボックスで選択した氏名をsheet2へa2以下に出席番号、b2以下に使命となります。(H.I)


 > ...以下同様に2組から6組まで1組のあとに続いてあります
 どのように以下同様なのですか?
 (seiya)


 横から失礼します「参考です」 

 FORM上にレイアウトした方がいいのでしょうが、SHEET1へのレイアウトとして作ってみました。
 1.まずSHEET1の10行目までをCOMBOBOX1とLIRSTBOX1の配置用エリアとしてCOMBOBOX1とLISTBOX1をレイアウトします。
   レイアウト後、LISTBOX1をダブルクリックしてLISTBOX1のプロパティーのLISTSTYLEを1-FMLISTSTYLEOPTIONにしてください。
 2.11行目以降をデータエリア用として、A11〜A16に検索すべき名称"1組"〜"6組"を入力します。
 3.B列とC列は検索されるデータが入るエリアとします。
  B列には検索されるべき"1組"〜"6組"のいずれかが入ります
  C列には例えば人名とかが入ります
   *この場合、A列はテーブルの定義でありB、C列はデータです。

 4.下記プログラムコード@をSHEET1のコードフォームに貼り付けてください。
 5.下記プログラムコードAをTHISWORKBOOKのコードフォームに貼り付けてください

 これで動くはずです。
 COMBOBOXで"組"を選択すればそれに該当する氏名がLISTBOXに表示され、
 LISTBOXに表示された氏名から該当するものをクリックすればSHEET2のA列の2行目から
 その氏名が記録されてゆきます。

 @
 Private Sub ComboBox1_Change() 'コンボボックスと同じ内容をリストボックスへ
 Dim i As Long
 ListBox1.Clear
 For i = 11 To 500
   If (Cells(i, 2) = "") Then Exit For
   If (Cells(i, 2) = ComboBox1) Then ListBox1.AddItem Cells(i, 3)
 Next i
 End Sub
 Private Sub ListBox1_Click() 'リストボックスの内容をSHEET2へ転送
 Dim i As Long
 For i = 2 To 500
   If (Sheet2.Cells(i, 1) = "") Then
     Sheet2.Cells(i, 1) = ListBox1
     Exit For
   End If
 Next i
 End Sub
 Private Sub Worksheet_Activate() 'コンボボックスへ内容をセット
 Dim i As Long
 ComboBox1.Clear
 For i = 11 To 20
   If (Cells(i, 1) = "") Then Exit For
   ComboBox1.AddItem Cells(i, 1)
 Next i
 End Sub

 A
 Private Sub Workbook_Activate()
   Sheet2.Activate
   Sheet1.Activate
 End Sub

 これは参考にしてください、内容を理解して少し改造をしないとご要望には叶いません。
                                                                                  (mr_mangoos)

 データの絞り込みはオートフィルタを使用し
 転記には、ダブルクリックイベントを使用するのはどうでしょう。

 勝手に「一回選んだら終わりだろ」と言うことで
 一度転記した人の行は削除するので、名簿を複製してください。

 Sheet1のシートモジュールに貼り付けます。
 
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    If Intersect(Target, Range("A:C")) Is Nothing Then Exit Sub
    If Target.Value = "" Then Exit Sub
With Sheets("Sheet2")
    .Range("A" & .Range("A" & Rows.Count).End(xlUp).Row + 1).Resize(, 3).Value = _
        Range("A" & Target.Row).Resize(, 3).Value
End With
    Range("A" & Target.Row).Resize(, 3).Delete shift:=xlUp
End Sub

 A:C列の何か入力があるセルをダブルクリックしたとき
 その行のデータがSheet2へ転記され、該当行は上詰めで削除します。

 クラスの絞り込みは、オートフィルタを使って下さい。
 各クラスを絞り込む行為を一度マクロの記録に取って於いて、
 シート上にボタンを6個配置し、それに割り当てておいても良いかもしれません。

 コンボボックスも、リストボックスも使わないので
 ご参考程度に。

 (HANA)

seiyaさん すみませんでした。名簿は各クラス40名なので、a1〜a40までが1組の生徒の出席番号で
a41〜a80までが2組の生徒の出席番号というように6組まで40人ずつの番号がふってあり、b列に
それに対応する生徒氏名が40人ずつあるというものです。mr_mangoosさん、Hanaさんありがとうございます。私には非常に難しい内容ではありますが、チャレンジしてみたいと思います。(やはりマクロを組まないとできない作業なのでしょうか。)   (H.I)

 シートの構成次第ではマクロじゃなくても出来そうな気もしますが・・・怪しいですが^^;
 一度、表で表してください。必要最小限で構いませんので。(最初の seiya さんの質問ですが・・・)
     [A] [B]
 [1]
 [2]

 (1or8)

 Combobox, ListBox を使用しないでマクロ無しでできると思います。
 入力規則を使用します。

 1) B列の各組の対象範囲に名前を付け。「挿入」-「名前」-「定義」
    名前に 1組、2組...6組 と付ける。
 2) 仮に「組」を選択するセルを D1 として
    2) - a D1を選択
    2) - b 「データ」-「入力規則」− 入力値の種類(A) で [リスト] を選択
    2) - c 元の値(S) に "1組,2組,3組,4組,5組,6組" と入力("を含む)
 3) 仮に「生徒」を選択するセルを E1 として
    3) - a E1 を選択
    3) - b 2) - b
    3) - c 元の値(S) に =Indirect(D1) と入力
 4) Sheet2に「選択された生徒」を表示させるセルを選択して
    =Sheet1!E1

 もし、「選択した生徒」をその都度他のセルへ表示となると、少々マクロも入ってきます。
 (seiya)

皆さんありがとうございます。とにかくチャレンジしてみます。(1or8)
さんへ
  [A] [B]
   1  安藤みき
   2 井上まお 
   3  上田馬助  以下同様です。 mr.mangoosさんへ。以下がやり方等不明です。

   レイアウト後、LISTBOX1をダブルクリックしてLISTBOX1のプロパティーのLISTSTYLEを1-   FMLISTSTYLEOPTIONにしてください
 4.下記プログラムコード@をSHEET1のコードフォームに貼り付けてください。
 5.下記プログラムコードAをTHISWORKBOOKのコードフォームに貼り付けてください

初心者なので式の意味等もよく判らないなかですが、頑張ってみます。 (H.I)


seiyaさんへマクロを使わない例をやってみましたが、生徒の名票はどこに配置するのでしょうか。
(H.I)

 生徒の名簿は 入力規則を設定するシートのA列に出席番号、B列に名前です。
 そのシート名は Sheet1 で想定しています。
 (seiya)

 お話中失礼します。

 Sheet1で選んでSheet2に表示  と言う事でしたので
 勝手に  データ転記&蓄積  かと思っていましたが
 その時にSheet1で選んでいるものが
 その時にSheet2に表示されれば良い
 だけ  なのですかね?

 データ蓄積でないなら  マクロを使う必要はないと思いますので
 無視してください。
 失礼しました。

 (HANA)

seiyaさん。すみません。勘違いでした。
ところで3) 仮に「生徒」を選択するセルを E1 として
    3) - a E1 を選択
    3) - b 2) - b
    3) - c 元の値(S) に =Indirect(D1) と入力
の部分ですが、その通り実行するとエラー表示が出てその後作業ができません。どうしたらよいのでしょうか。
Hanaさんへ。
文章がつたなくて申し訳ありません。データの蓄積になります。(sheet2に一覧の形で作成したい)
(H.I)


 どのようなエラーが出るのですか?
 それと、データを蓄積するのならVBAコードも必要になります。
 (seiya)

seiyaさんへ
”元の値はエラーと判断されます。続けますか?”の表示が出て、はいをクリックしてもいいえをくりっくしても、E1のセルにはボックスが作成されますが、矢印をクリックしても何も表示されません。
(H.I)


 SHEET1のA11以降からA16迄"1組","2組","3組","4組","5組","6組"と入力します。(選択条件としてCOMBOBOXに表示する為の定義です。)
 SHEET1のB11とC11以降からデータを入力します。
 例.
       B11以降        C11以降
     1組     佐藤寅雄
     1組     鈴木猫太
     2組     工藤うさぎ
     1組     遠藤熊五郎
      ・       ・
      ・       ・

 >レイアウト後、LISTBOX1をダブルクリックしてLISTBOX1のプロパティーのLISTSTYLEを1-FMLISTSTYLEOPTIONにしてください

 表示(V) → ツールバー(T)→ VISUALBASICをクリック(チェックが入ります)→ VBのツールバーが表示されます
 ツールバーの中からデザインモード(定規・三角定規のボタン)をクリック
 デザインモードの状態でレイアウトしたリストボックスをダブルクリックするとそのプロパティーが表示されますので
 その中のLISTSTYLEを変更してください。
 デザインモードボタンを再度クリックして実行モードに戻します。

 >4.下記プログラムコード@をSHEET1のコードフォームに貼り付けてください。
 >5.下記プログラムコードAをTHISWORKBOOKのコードフォームに貼り付けてください

 上記と同じ動作でツールバーを表示してVISUAL BASIC EDITORボタンをクリックするとコードフォームが表示されます。
 VBAプロジェクトウインドウの階層表示の中からSHEET1をダブルクリックするとSHEET1のコードフォームが表示されます。
 そのコードフォームの左上のドロップダウンからWORKSHEETを選択、右上のドロップダウンからACTIVATを選択して@を貼り付けます。
 VBAプロジェクトウインドウの階層表示の中からTHIS WORKBOOKをダブルクリックするとTHIS WORKBOOKのコードフォームが表示されます。
 そのコードフォームの左上のドロップダウンからWORKBOOKを選択、右上のドロップダウンからACTIVATを選択してAを貼り付けます。

 理解して頂けるでしょうか、当方も説明に苦労します。教科書等である程度のご勉強をお勧めします。
 不明な点があったら又質問をしてみてください。
                             (mr_mangoos)

 1) B列の各組の対象範囲に名前を付け。「挿入」-「名前」-「定義」
    名前に 1組、2組...6組 と付ける

 この作業がうまくできてないのかなーー?

 B1:B40 を選択 - [挿入] - [名前] - [定義] 名前に 1組
 B41:b80を選択 ----------同上------------------- 2組
 .
 .
 .
 という感じですが..
 (seiya)

MR_mangoosさんへ。やってみます。またわからなければお願いします。
Seiyaさんへ。
 B1:B40 を選択 - [挿入] - [名前] - [定義] 名前に 1組
  B41:b80を選択 ----------同上------------------- 2組
この通りやってみたのですが。(H.I)


 vba で
 Sheet1に
 ComboBox X 1, ListBox X 1 を配置
 (プロパティはすべて規定値にしてください)

 Sheet1 の Sheet module へ (シートタブを右クリックして[コードを表示])
 右空白部分に下記コードを貼り付け、x をクリックしてエクセルに戻る

 Private Sub Worksheet_Activate()
 ComboBox1.Clear  '<- 追加
 ComboBox1.List = Array("1組","2組","3組","4組","5組","6組")
 End Sub

 Private Sub ComboBox1_Click()
 If ComboBox1.ListIndex = -1 Then Exit Sub
 With ComboBox1
     ListBox1.List = Range("b" & 40 * .ListIndex + 1).Resize(40).Value
 End With
 End Sub

 Private Sub ListBox1_Click()
 If ListBox1.ListIndex = -1 Then Exit Sub
 Sheets("sheet2").Range("a" & Rows.Count).End(xlUp)(2).Value = ListBox1.Value
 End Sub
 (seiya)

 これ以上参加者が増えるとH.Iはんを惑わせるだけかもしれまへんが、なんとか一度
 だけの説明で完成でけるよう頑張ってみました。
 先ず新しいブックを用意します。

 @Sheet1のA41からB280に既にあるデータをコピーします。
 A三角定規&鉛筆のアイコンをクリック。
 Bハンマー&スパナのアイコンをクリック。
 Cコンボボックスをお好きなところへ配置します。
 Dリストボックスをお好きなところへお好きな大きさで配置します。

 Eそのアイコンをそれぞれクリックして終了します。
 F画面の下の方に\Sheet1/が見えますから、そこを右クリックします。
 Gコードの表示を選択したらVBEの画面が登場します。
 Hその真新しい画面に下のコードをコピペします。

 エクセルに戻って
 ISheet2のA1に出席番号B1に氏名と書き込みます。
 これで準備完了ですワ。

 Sheet1を開いて コンボボックスをスクロールし、そのどれかを選択した上
 リストボックスの生徒名をクリックしていってみてくらはい。
 ええ加減なところでSheet2を開いてみると、どうでっか、こんな塩梅で?
 順序正しくやってみれば必ずやH.Iはんのお望み通りにデータが抽出でけます、ハイ。
       (弥太郎)
 '---------------------------
 Private Sub Worksheet_Activate()
    ComboBox1.Clear
    ComboBox1.List = Array("1組", "2組", "3組", "4組", "5組", "6組")
 End Sub
 Private Sub ComboBox1_Change()
    Dim i As Integer
    With ListBox1
        For i = 1 To 6
            Select Case ComboBox1
                Case i & "組"
                    .ListFillRange = "B" & i * 40 + 1 & ":B" & (i + 1) * 40
                    Exit For
            End Select
        Next i
    End With
 End Sub
 Private Sub ListBox1_Click()
    Dim data
    data = Cells(Application.Match(ListBox1, Range("b" & 40 * (ComboBox1 _
                .ListIndex + 1) + 1).Resize(40), 0) + _
                            (ComboBox1.ListIndex + 1) * 40, 1).Resize(, 2).Value
    With Sheets("sheet2")
        .Cells(.Cells(Rows.Count, 1).End(xlUp).Row + 1, 1).Resize(, 2) = data
    End With
 End Sub

 弥太郎さん、
 > Application.Match(ListBox1, Range("b41:b280"), 0)
 1) なぜ Range("b41:b280") なのでしょう?
 2) Match だと、同姓同名の生徒がいる場合、組が違う場合も出るのでは?
 (seiya)

 > @Sheet1のA41からB280に既にあるデータをコピーします。
 これ、見落としてました。
 (seiya)

 あっ、さういえばそうでんなぁ・・・。
 もすこし考えてみませう。^^
 一発っちゅう訳にはいきまへんでしたなぁ。
 240人の中に同姓同名の確率は極めて低いんでっしゃろけど、0やおまへんしなぁ。

 あ、それはそうとseiyaはんのコンボボックスはエラーがでまっせ。
        (弥太郎)


seiyaさん、弥太郎さんありがとうございます。すべては私の不勉強のせいですのでご容赦下さい。
いろいろ試してみますのでまたよろしくお願いします。
(H.I)


 > あ、それはそうとseiyaはんのコンボボックスはエラーがでまっせ。
 あらら、
 Clear が抜けているからですかね?...
 無くても大丈夫のような気がしたのですが...
 (seiya)

 まぁ昔の単純な名前と違うて最近のモダンな名前からすれば、99.9%同姓同名が
 240人の集団に居りますまいとは思うんですけど、一応seiyaはんのイチャモンを解消
 しときますワ。^^(上記マクロ改訂済み)
      今宵も酔いちゃった^^(弥太郎)


弥太郎さんへ。マクロ挑戦してみました。動きました。ありがとうございました。ところで再度質問なのですが、元データはA列に出席番号、B列に氏名という2種類のデータだけでしたが、例えばC列には数学の点数、D列には英語の点数という風にSheet2に表示させるデータを増やしたい場合はどのように数式を加えるのでしょうか。
また、これはこのサイトをご覧の皆様にお尋ねしたいのですが、私のようにマクロについては主にキー操作記録を利用してボタンを張り付けて利用している程度の知識しか持たない者に最適なマクロの組み方の参考図書等ご存知でしたらお教え下さい。  (H.I)

弥太郎さんへ。
さらにお尋ねしたい点が1つあります。例えば1組で何人かを選択し、sheet2でその結果を確認した後、sheet1に戻るとクラスの表示は消えていますが、リストボックスには1組の生徒氏名がそのまま残って表示されています。この段階で生徒を選択するとエラーでマクロが停まってしまいました。これを解決するには一旦マクロを解除して再度クラスを選択するという手があるのですが、これ以外の方策はあるのでしょうか?
(H.I)

seiyaさんへ。
先ほど、seiyaさんのマクロも試行錯誤して何とか動かすことができました。そこで弥太郎さんと同じ質問なのですが、seiyaさんの例ではsheet2には生徒氏名のみが表示されました。(弥太郎さんの場合は
出席番号と氏名)例えばsheet2のa列には生徒のクラス、b列には出席番号、c列には氏名、d列には例えば
合計点という風に、sheet2に表示されるデータを増やすにはどうしたらよいのでしょうか。
(H.I)

 どのように変更したのか、コードを見せてください。
 (seiya)

 Private Sub ComboBox1_Click()
 If ComboBox1.ListIndex = -1 Then Exit Sub
 With ComboBox1
     ListBox1.List = Range("a" & 40 * .ListIndex + 1).Resize(40,2).Value '<- 変更
 End With
 End Sub

 Private Sub ListBox1_Click()
 If ListBox1.ListIndex = -1 Then Exit Sub
 With ListBox1
     Sheets("sheet2").Range("a" & Rows.Count).End(xlUp)(2).Resize(,2).Value = _
            Array(.List(.ListIndex, 0), .List(.ListIndex,1))
 End With
 End Sub

 な感じでどうでしょう?
 (seiya)


早速のご回答ありがとうございます。試行錯誤というのはseiyaさんのマクロを変更したという意味ではなく、私の知識のなさから、かなり手間取ったという意味です。
データ追加のマクロやってみます。(H.I)

Seiyaさんへ。やってみました。
確かにsheet2には出席番号と氏名が表示されるようになるのですが、今度はsheet1のリストボックスに出席番号しか表示されません。また前の質問にようにデータ項目を増やしたい場合はどうすればよいのでしょうか。重ね重ね申し訳ありません。急ぎませんのでよろしくお願いします。(H.I)

 Private Sub ComboBox1_Click()
 If ComboBox1.ListIndex = -1 Then Exit Sub
 With ComboBox1
     ListBox1.List = Range("a" & 40 * .ListIndex + 1).Resize(40,2).Value 
 End With
 With ListBox1 '<- 修正
     .ColumnCount = 2  '<- 列数の指定
     .ColumnWidths = "10;50"  '<- 列幅を適当に修正してください,名前だけなら"0;50" とか
 End with
 End Sub
 (seiya)


 > また前の質問にようにデータ項目を増やしたい場合はどうすればよいのでしょうか。重ね重ね申し訳ありません。急ぎませんのでよろしくお願いします。

 Private Sub ComboBox1_Click()
 If ComboBox1.ListIndex = -1 Then Exit Sub
 With ComboBox1
     ListBox1.List = Range("a" & 40 * .ListIndex + 1).Resize(40,3).Value 
 End With
 With ListBox1 '<- 修正
     .ColumnCount = 3  '<- 列数の指定
     .ColumnWidths = "10;50;50"  '<- 列幅を適当に修正してください,名前だけなら"0;50;0" とか
 End with
 End Sub

 Private Sub ListBox1_Click()
 If ListBox1.ListIndex = -1 Then Exit Sub
 With ListBox1
     Sheets("sheet2").Range("a" & Rows.Count).End(xlUp)(2).Resize(,3).Value = _
            Array(.List(.ListIndex, 0), .List(.ListIndex,1),.List(.ListIndex,2))
 End With
 End Sub
 勘違いしたようなので、削除して新たにアップしました。
 (seiya)

 H.Iはん、ごめんなはれや、今日は一日外出しとりました。
 お訊ねの件、明日見直してみます。なんせ、もうでけあがってますもんで・・・^^
     でけあがらん日はないんか!(弥太郎)

 おはようゴザイマス。
 先ず初めのご質問ですけど
 ListBoxのコードに.Resize(,2)と書かれとる所が2ヶ所ありますわなぁ。
 これは当該行の2列 ちゅう意味ですワ。((1,2)とと同じ)
 ですから4列のデータを抽出したければ(,4) と、5列やと(,5)と変更すればOKです
 2ヶ所ですよ、でけまっか?

 次にSheet2から戻った時の事なんですけど、先刻転送した状態のままComboBox及び
 ListBoxに表示しておきたいのなら
 ComboBox1.Clearの行を削除してくらはい。

 また両方を未入力状態にしときたいなら
 ComboBox1.Clearの下の行に
 ListBox1.ListFillRange = ""
 を差し込みます。
                 (弥太郎)


おはようございます。
まづはseiyaさんへ。
やってみました。確かに表示データを増やすことはできたのですが、リストボックスには生徒氏名を表示させたいのですが、a列のデータが表示されてしまいます。また、コンボボックスにてクラスを変更するたびにマクロのエラーが出て停まってしまいます。(”オブジェクトが必要です”の表示がでます。デバックすると.ColumnCount = 3の部分が黄色になってます。

弥太郎さんへ。
早速チャレンジしてみます。
(H.I)


 1) ColumnWidths で調整してください。
    ="0;50;0" にすれば名前だけ。"50;50;50" にすれば3列すべて というように。

 2) With ListBox1  '<- 1が抜けていました
 (seiya)

弥太郎さんへ
やってみました。次の3点についてさらにお尋ねします。
1)3列表示はできましたが4列にしても((,4)にしても)表示は3列までのデータしか表示されませんで  した
2)なぜか立ち上げたとき、あるいはマクロを直した際に、たまにリストボックスの表示が10名分から減  って行きます。7名になったり、5名になったりと縦の幅が勝手に縮小されます。
3)最初に立ち上げたとき、全く動かず(コンボボックスに何も表示されない)、sheet1とsheet2を行き  来しているうちにコンボボックスに表示が出て動くようになることがたびたびあります。

以上の3点についてお願いします。
seiyaさんへ
やってみます。
(H.I)


 また何をやらかしたんでせう?
 他に競合するようなマクロは入ってまへんか?
 私のコードを活かすには私のコード以外に入れないでやって下さいヨ。
 念のためもう一度コードをアップしますワ。
 当方では1)も 2)も 3)も 全く発生いたしまへん。
 ↑ 当方でも 3)の現象は確認でけました。
   (弥太郎)
 '-----------------
 はい、確認でけました。(汗
 今少しお待ちを・・・

 '----------------------------
 Sub auto_open()
    With Sheets("sheet1")
        .ComboBox1.Clear
        .ComboBox1.List = Split("1組 2組 3組 4組 5組 6組")
        .ListBox1.ListFillRange = ""
    End With
 End Sub

 Alt+F8でVBEを開きます。
 挿入→標準モジュールを選択して、その真新しい画面に↑のコードをコピペします。
 左のプロジェクト欄にSheet1っちゅうんがありますから、そこをWクリックします。
 そこに書かれたコードを全て削除してくらはい。
 削除された画面に下のコードをコピペします。
 保存した上一旦ブックを閉じ、改めて開いた上試してみておくんなはれ。
       (弥太郎)
 '-----------------------
 Private Sub ComboBox1_Change()
    Dim i As Integer
    With ListBox1
        For i = 1 To 6
            Select Case ComboBox1
                Case i & "組"
                    .ListFillRange = "B" & i * 40 + 1 & ":B" & (i + 1) * 40
                    Exit For
            End Select
        Next i
    End With
 End Sub
 Private Sub ListBox1_Click()
    Dim data
    data = Cells(Application.Match(ListBox1, Range("b" & 40 * (ComboBox1 _
                .ListIndex + 1) + 1).Resize(40), 0) + _
                            (ComboBox1.ListIndex + 1) * 40, 1).Resize(, 4).Value
    With Sheets("sheet2")
        .Cells(.Cells(Rows.Count, 1).End(xlUp).Row + 1, 1).Resize(, 4) = data
    End With
 End Sub


たびたび申し訳ありません。再チャレンジしてみます。(H.I)

弥太郎さんへ
解決しました。4列目のデータが出ない理由は私の単純なミスでした。3列目のデータが4列目にくいこんでいたため4列目だと思っていたデータは5列にあるというお粗末なものでした。すいませんでした。
最後のお願いになると思いますが、現状では入力元のデータはsheet1にあるわけですが、例えばsheet3にあるデータを引っ張りたい場合はどうするのでしょうか。単純にsheet3のデータをコピーすればいい話とは思うのですが、それをしない方策はありますか?
あともう一つ、こんな程度の知識しかない私がマクロを勉強するのに最適な参考図書があれば紹介していただけると幸いです。(H.I)

 では、もう一度初めからやりまひょか。
 今までのコードは全て削除します。
 そして、下のコードをそれぞれのモジュールにコピペしてくらはい。
 それと、参考図書と申されてもそれがしの利用した書籍は古くて使いもんになりまへん
 やろから、本屋で初歩の本を探してみておくんなはれ。
 さらに、ここで指南してらっしゃるせんせぇ方の殆どはこの学校で手頃なテーマを見つ
 けて憶えたと聞き及んでおりますし、それがしもまたその例外ではありまへん。
 なぁに、その気になれば1年で習得でけまっせ。
      (弥太郎)
 '標準モジュールへ
 '----------------------
 Sub auto_open()
    With Sheets("sheet1")
        .ComboBox1.Clear
        .ComboBox1.List = Split("1組 2組 3組 4組 5組 6組")
        .ComboBox1.ListIndex = -1 'この行追加
        .ListBox1.ListFillRange = ""
    End With
 End Sub
 '--------------
 'シートモジュールへ
 '----------------
 Private Sub ComboBox1_Change()
    Dim i As Integer
    With ListBox1
        For i = 1 To 6
            Select Case ComboBox1
                Case i & "組"
                    .ListFillRange = "Sheet3!B" & i * 40 + 1 & ":B" & (i + 1) * 40
                    flag = True
                    Exit For
            End Select
        Next i
    End With
 End Sub
 Private Sub ListBox1_Click()
    Dim data
    With Sheets("sheet3")
        data = .Cells(Application.Match(ListBox1, .Range("b" & 40 * (ComboBox1 _
                .ListIndex + 1) + 1).Resize(40), 0) + _
                            (ComboBox1.ListIndex + 1) * 40, 1).Resize(, 5).Value
    End With
    With Sheets("sheet2")
        .Cells(.Cells(Rows.Count, 1).End(xlUp).Row + 1, 1).Resize(, 5) = data
    End With
 End Sub


弥太郎さんへ
いろいろとありがとうございました。
これからもお世話になることもあるかもしれません。その際にはまたよろしくお願いいたします。

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.