Excel VBA質問箱 IV

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

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


7639 / 13644 ツリー ←次へ | 前へ→

【37816】空白列の処理について ゼロ 06/5/19(金) 11:29 質問[未読]
【37817】補足 ゼロ 06/5/19(金) 11:42 発言[未読]
【37819】Re:補足 Jaka 06/5/19(金) 12:53 発言[未読]
【37821】質問内容の訂正 ゼロ 06/5/19(金) 13:19 質問[未読]
【37822】Re:質問内容の訂正 Jaka 06/5/19(金) 13:36 回答[未読]
【37823】ありがとうございます ゼロ 06/5/19(金) 13:51 お礼[未読]
【37824】Re:質問内容の訂正 ハト 06/5/19(金) 13:54 回答[未読]
【37825】なるほどです ゼロ 06/5/19(金) 14:18 お礼[未読]
【37827】Re:質問内容の訂正 Kein 06/5/19(金) 14:50 回答[未読]
【37830】Re:質問内容の訂正 ゼロ 06/5/19(金) 19:19 お礼[未読]

【37816】空白列の処理について
質問  ゼロ  - 06/5/19(金) 11:29 -

引用なし
パスワード
   たびたびの質問で恐縮です。

セルに下記のような表を作成し、これを元にグラフを描かせるような
作業を試しています。

  A   B   C   D    E
1 aaa        bbb     ccc    
2 aaa        bbb     ccc    
3 aaa        bbb     ccc    
4 aaa        bbb     ccc    
5 aaa        bbb     ccc    

この時、B列、D列が空白の場合、それぞれ左に列を詰めたいと考えています。
ちなみに、この表の値はユーザーフォームから入力しているため
できれば、フォームからの入力時に空白を判定して
値を記入できたら・・・と思ってます。

そのためには、基本的なマクロについてご教授お願いします。

【37817】補足
発言  ゼロ  - 06/5/19(金) 11:42 -

引用なし
パスワード
   ちなみに、削除して列を詰める方法はできたので、
応用編として、

チェックボックスを1〜5まで配置して、1,3,5のチェックを入れた際に
該当するデータを詰めて入力する方法をお願いします。

【37819】Re:補足
発言  Jaka  - 06/5/19(金) 12:53 -

引用なし
パスワード
   ▼ゼロ さん:
>チェックボックスを1〜5まで配置して、1,3,5のチェックを入れた際に
>該当するデータを詰めて入力する方法をお願いします。
すみません。意味がさっぱり解りません。

ここの基本方針を引用したいとは思わないけれど...。

・まず「何がしたいのか」を書いてください
単に「○○するにはどうすればいいのですか」と書くだけでは、あなたの望む回答が得られないかもしれません。あなたが最初に書くべきことは、「何がしたいか」です。

例えばExcelなら、「最後のデータを調べるにはどうすればいいですか?」という質問文では、あなたが何をしたいのか、何を聞きたいのかわかりません。

せめて「文字列のデータがセルA1から下向きに1000行並んでいます。連続した同じデータが存在した場合に、2つめ以降の連続データを行ごと削除したいと考えています。作業が進むにつれ最後の行がどんどん変化すると思うのですが、どの行まで作業すればよいか、ということを判断するには、どんな方法があるのでしょうか。」ぐらいは書いてください。

【37821】質問内容の訂正
質問  ゼロ  - 06/5/19(金) 13:19 -

引用なし
パスワード
   理解できないような質問を投げかけてしまっていたので、訂正します。すいません・・・

まず、ユーザーフォームのコンボボックスをつかってデータを選定させて、
その際、チェックボックスにチェックを入れたものだけをシートに値を入れる作業を行いました。

ここで、各コンボボックスはリスト形式となっており、その中から一つ選択しボックス横のチェックを入れてコマンドボタンを押すと、該当するデータをシート内から選び出して、それを各列に記入させています。

そこで、今5つのコンボボックスとチェックボックスを配置して上記の作業を行うとします。1つ目、3つ目、5つ目のコンボボックスに該当するデータを呼び込むと以下のようになります(入力の関係上、ボックス数=セル数として、For nextでデータを書いてます)

  A   B   C   D    E
1 aaa      bbb      ccc    
2 aaa      bbb      ccc    
3 aaa      bbb      ccc    
4 aaa      bbb      ccc    
5 aaa      bbb      ccc    

そこで、この次の段階として、各空白行を入れずに左詰めでデータを入力させていんですが、どうやっていいものか分かりません。

データを単に削除して左詰めではなく、入力する段階でこの作業ができないか検討しています。

アドバイスお願いします。。

【37822】Re:質問内容の訂正
回答  Jaka  - 06/5/19(金) 13:36 -

引用なし
パスワード
   1列目、2列目が空白でないのなら、これでいいです。
Cells(1, 1).End(xlToRight) = "あああ"

1列目、2列目の状態で色々変わってきますから、その辺は細かく分岐してください。
A列を選択して、Ctrl + → ですから、色々試してみてください。

解釈間違ってる??

【37823】ありがとうございます
お礼  ゼロ  - 06/5/19(金) 13:51 -

引用なし
パスワード
   Jaka さん 分かり難い質問していたのにも関わらず、再度フォローして頂いてどうもありがとうございます!
ちょっと、方向性は違ったんですが、

>Cells(1, 1).End(xlToRight) = "あああ"

の記述のヒントで今作業してみたんですが、どうやら解決しそうな気配です!
とにかくチャレンジしてみます!

何気ない一行でかなり助かることがあるんで
質問する際には主旨を明確に記述するように気をつけます。。

【37824】Re:質問内容の訂正
回答  ハト  - 06/5/19(金) 13:54 -

引用なし
パスワード
   お使いになられてるコードが判らないので的が外れてるかもしれませんが
こんな感じですかね?

Dim i As Integer
Dim j As Integer
Dim k As Integer

  j = 1
  For i = 1 To 5
  
    If Me("チェックボックス" & i) = True Then
      
      For k = 1 To 5
        Sheets("Sheet1").Cells(k, j).Value = Sheets("Sheet1").Cells(k, i).Value
      Next k
      
      j = j + 1
    End If
  
  Next i

【37825】なるほどです
お礼  ゼロ  - 06/5/19(金) 14:18 -

引用なし
パスワード
   ハト さん 質問内容がわかり難いにも関わらず親切にありがとうございます!

jakaのヒントから一応できました。といっても、これからループさせるために研究しようとしてたことろです(汗

>お使いになられてるコードが判らないので的が外れてるかもしれませんが
>こんな感じですかね?

すごいです!
今やってる内容は、まさに↓のような感じの記述です。
幾つか変数を使ってるので、select caseで分岐させてやってました。


>  j = 1
>  For i = 1 To 5
>    If Me("チェックボックス" & i) = True Then
>      For k = 1 To 5

省略

>      Next k
>      j = j + 1
>    End If
>  Next i

一行目と、下から3行目を見て、なるほどと思いました。
チェックボックスがtrueの時だけカウント?させるようにすれば、何のことはなく、普通に左列から順に数値を配置できるということですね。。

言われて見れば普通の足し算ですが、なかなか気が付かなかったです・・・
まだまだ素人の域を脱しないんですが、
jakaさんの方法も一つのやり方として覚えておいて、他にも応用できそうな時に活用してみたいと思ってます。

アドバイスありがとうございました!

【37827】Re:質問内容の訂正
回答  Kein  - 06/5/19(金) 14:50 -

引用なし
パスワード
   コンボボックスで「いずれかのリストを選択している」ということを
判定できれば良いのですから、チェックボックスは余分ですね。
なのでチェックボックスは全て削除するとして・・

Private Sub CommandButton1_Click()
  Dim i As Integer, j As Integer
 
  For i = 1 To 5
   With Me.Controls("ComboBox" & i)
     If .ListIndex > -1 Then
      j = j + 1
      Sheets("Sheet1").Cells(1, j) _
      .Resize(5).Value = .Value
     End If
   End With
  Next i
End Sub

というようなコードを入れておけば良いでしょう。もちろん
>Sheets("Sheet1").Cells(1, j) _
>.Resize(5).Value = .Value
の部分は
>該当するデータをシート内から選び出して、それを各列に記入
の処理に変更して下さい。

【37830】Re:質問内容の訂正
お礼  ゼロ  - 06/5/19(金) 19:19 -

引用なし
パスワード
   Kein さん 親切な記述ありがとうございます。

一応、イメージしたものは完成しました。。

>コンボボックスで「いずれかのリストを選択している」ということを
>判定できれば良いのですから、チェックボックスは余分ですね。

あ、すいません・・・
今回トライしてのは、1つのデータを取得するために、複数のコンボボックスを
配置してました。
それで、一応確認のためにチェックボックスをつけて、
もしデータの設定忘があった場合に
メッセージボックスを表示してループを終了・・・みたいな感じでトライしてました。

しかし、これからも同様の作業をしていく上で、keinさんの方法は
とても勉強になます。ありがとうございました。。

最近、ユーザーフォームをようやく使えるようになってきました。
そうした上で、keinさんをはじめ、みなさんのアドバイスは助かります。

またお世話になると思いますが、その際もよろしくお願いします。

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