Excel VBA質問箱 IV

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

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


5582 / 13645 ツリー ←次へ | 前へ→

【50008】AutoFitができません。 かずお 07/7/3(火) 13:38 質問[未読]
【50010】Re:AutoFitができません。 Lindy 07/7/3(火) 13:47 発言[未読]
【50012】Re:AutoFitができません。 かずお 07/7/3(火) 15:50 お礼[未読]
【50013】Re:AutoFitができません。 Lindy 07/7/3(火) 16:08 発言[未読]
【50014】Re:AutoFitができません。 Lindy 07/7/3(火) 16:26 発言[未読]
【50016】Re:AutoFitができません。 かずお 07/7/3(火) 17:45 お礼[未読]
【50020】Re:AutoFitができません。 Lindy 07/7/4(水) 8:50 発言[未読]
【50022】ご迷惑をお掛けしっぱなしですみません。 かずお 07/7/4(水) 10:00 お礼[未読]
【50027】Re:ご迷惑をお掛けしっぱなしですみません。 Lindy 07/7/4(水) 14:18 発言[未読]
【50030】Re:ご迷惑をお掛けしっぱなしですみません。 かずお 07/7/4(水) 19:18 お礼[未読]
【50034】Re:ご迷惑をお掛けしっぱなしですみません。 Lindy 07/7/5(木) 9:17 発言[未読]
【50040】Re:ご迷惑をお掛けしっぱなしですみません。 かずお 07/7/5(木) 16:47 お礼[未読]

【50008】AutoFitができません。
質問  かずお E-MAIL  - 07/7/3(火) 13:38 -

引用なし
パスワード
   開いたブック内の全シートを選択し、列幅をオートフィットしたいのですが上手くいきません。何方か教えて下さい。

コードです

Private Sub CommandButton4_Click()
  ThisWorkbook.Worksheets.Select
  Cells.EntireColumn.AutoFit
End Sub

【50010】Re:AutoFitができません。
発言  Lindy  - 07/7/3(火) 13:47 -

引用なし
パスワード
   ▼かずお さん:
こんにちは

ワークシート全体を指定できないので
存在するワークシートをループします

Private Sub CommandButton4_Click()
Dim c As Worksheet
For Each c In ThisWorkbook.Worksheets
 c.Cells.EntireColumn.AutoFit
Next
End Sub

【50012】Re:AutoFitができません。
お礼  かずお E-MAIL  - 07/7/3(火) 15:50 -

引用なし
パスワード
   Lindy さんありがとうございます。おかげ様でうまくできました。図々しいお願いなのですがもう一つお願いします。Sheet1以外のシートの一行目に行を挿入しsheet1のコピーを貼り付けたいのですが以下のコードではsheet1だけにシート数の分行が挿入され1行のみ貼り付けられてしまいます。どのようにしたらいいのかご教授願います。図々しくてすみません。

Private Sub CommandButton4_Click()
 Sheets("sheet1").Activate
  Range("A1:J1").Select
  Selection.Copy
Dim c As Worksheet
For Each c In ThisWorkbook.Worksheets
 c.Cells.EntireColumn.AutoFit
Rows("1:1").Select
  Selection.Insert Shift:=xlDown
Next
End Sub

【50013】Re:AutoFitができません。
発言  Lindy  - 07/7/3(火) 16:08 -

引用なし
パスワード
   ▼かずお さん:
マクロの記録で勉強されているみたいですね
徐々にでもコードの意味を理解されていくと良いですよ^^

ご質問の内容をそのままコードにしていくだけです

>For Each c In ThisWorkbook.Worksheets
> c.Cells.EntireColumn.AutoFit
>Rows("1:1").Select
↑ここで、どのシートの1行目なのかがわからないのでシート1以外のシート
だということを教えてあげます。
>  Selection.Insert Shift:=xlDown
>Next

コードにするとこんな感じでいけると思います

Private Sub CommandButton4_Click()
Dim c As Worksheet
For Each c In ThisWorkbook.Worksheets
 If c.Name <> "Sheet1" Then
  c.Rows(1).Insert Shift:=xlDown
  c.Range("A1:J1").Value = Sheets("sheet1").Range("A1:J1").Value
 End If
 c.Cells.EntireColumn.AutoFit
Next
End Sub

【50014】Re:AutoFitができません。
発言  Lindy  - 07/7/3(火) 16:26 -

引用なし
パスワード
   ▼かずお さん:
一応、コードの説明を書いてみます。
今後の為にもヘルプなどで確認してください

>Private Sub CommandButton4_Click()
>Dim c As Worksheet
>For Each c In ThisWorkbook.Worksheets
 マクロが書いてあるブックのワークシート全てに順番に処理します
> If c.Name <> "Sheet1" Then
  もし、処理するシートの名前がSheet1以外なら
>  c.Rows(1).Insert Shift:=xlDown
   そのシートの1行目に1行挿入します
>  c.Range("A1:J1").Value = Sheets("sheet1").Range("A1:J1").Value
   そのシートのA1:J1にSheet1のA1:J1の内容を記入します
> End If
> c.Cells.EntireColumn.AutoFit
  オートフィットします
>Next
 次のシートの処理に移ります
>End Sub

【50016】Re:AutoFitができません。
お礼  かずお E-MAIL  - 07/7/3(火) 17:45 -

引用なし
パスワード
   Lindy さん御親切にして頂き本当に有難うございます。いじりすぎて訳が分からなくなってしまいお願いしてしまいました。まだ触れたことのない構文もあり今後の課題として勉強します。最終的には二つのプログラムを一つにしようとしてますが
、最初に作ったプログラムは何所に何を書いても受け付けてくれません。プログラム上無理なのでしょうか。アドバイスをお願い頂けますか?本当に図々しくてすみません。

最初のプログラムはsheet1内の業者名を取得し業者数分のシートを作りタブに業者名をつけます。
Private Sub CommandButton1_Click()
 Dim ws_list As Worksheet
 Dim ws_add As Worksheet
 Dim theName As String    '会社名の保存用
 Dim i As Integer
 Dim startRow As Integer   'コピー範囲の先頭行の位置
 Dim endRow As Integer    'コピー範囲の最終行の位置
 Sheets("Sheet1").Activate
 Range("C2").Select     'データを会社名順にソートしておく
  Range("A2:J3000").Sort Key1:=Range("C2"),Order1:=xlAscending,Header:= _
  xlGuess, OrderCustom:=1, chCase:=False,Orientation:=xlTopToBottom, _
  SortMethod:=xlPinYin, DataOption1:=xlSortNormal
 Set ws_list = Worksheets("Sheet1")
 '最初の会社名でシートを作成する
  startRow = 2
  theName = ws_list.Cells(2, 3)
  Set ws_add = Worksheets.Add
  ws_add.Name = theName
  For i = 2 To 1000
  If ws_list.Cells(i, 3) <> theName Then
   '会社名が変わったときの処理
   '旧会社名のコピー処理
  endRow = i - 1
  ws_list.Select
  ws_list.Range(Cells(startRow, 1), (Cells(endRow, 10))).Copy
  ws_add.Paste
   '新会社名のシート作成処理
  theName = ws_list.Cells(i, 3)
  If theName <> "" Then
  Set ws_add = Worksheets.Add
  ws_add.Name = theName
  End If
   '新会社名の開始位置を保存
  startRow = i
  End If
 Next
 Set ws_add = Nothing
 Set ws_list = Nothing
End Sub

長くてすみません。

【50020】Re:AutoFitができません。
発言  Lindy  - 07/7/4(水) 8:50 -

引用なし
パスワード
   ▼かずお さん:
おはようございます。
会社からしか見ないので返信遅くなりました

何も受け付けないというのは、まったく動かないのですか?
そうではなくどこかでエラーになるのなら、
どこで、どういうエラーが出るのかを調べてみてください。

また、シート1の業者名リストかな?
の状態もわかりません

【50022】ご迷惑をお掛けしっぱなしですみません。
お礼  かずお E-MAIL  - 07/7/4(水) 10:00 -

引用なし
パスワード
   Lindy さん お忙しい中時間をさいて頂き有り難うございます。説明の仕方が適切でなく申し訳ありません。何も受け付けないというのは、その多くは構文の間違いやサポートされない物のようです。どんな時にどの様なエラーが出たかの記録は、焦っているのか怠けものか残して有りません基本的に勉強不足です。最初に作ったのが5〜6年前でその後忙しさと諦めムードでスリープしていました。もう一度しらべてみます。

シート1の説明とその目的は、複数のサイトに複数の業者が日毎に変わり変わりに出入りするとして、その日付,作業内容と人数他をシート1に記録し、サイト毎と業者毎及び期間を指定をして集計するもので、日常業務に役立てばとよく分かっていないのに欲張ったものだと思っています。素人同然の私の質問と対応にお応え頂き、心より御礼を申し上げます。

他にも作りかけで目的まで達成してないものがありますが、頑張ってみたいと思っています。またご質問するときが有るかと思いますが、その節には宜しくお願い致します。

【50027】Re:ご迷惑をお掛けしっぱなしですみませ...
発言  Lindy  - 07/7/4(水) 14:18 -

引用なし
パスワード
   ▼かずお さん:
>その多くは構文の間違いやサポートされない物
これは実行した際にエラーとしてひっかかるはずなので
デバッグモードで1つ1つヘルプを見ながら調べていくと良いですよ^^
引っかかった構文にカーソルを合わせてF1押せば簡単に見られますので

やりたい事を羅列してフローなりを作って、
それを文法にあわせて表記していく・・・

という感じで私も勉強してます。

これ、作っておくと次に全然違うものを組むときにも
同じような部分を抜き出すのが簡単で使いまわし出来て便利でした。
よく使うルーチンなどは1つ1つに分けてコールして使ったりしてます。

がんばってくださいね〜^^

【50030】Re:ご迷惑をお掛けしっぱなしですみませ...
お礼  かずお E-MAIL  - 07/7/4(水) 19:18 -

引用なし
パスワード
   おかげ様でなんとか使えるようになりました。もう少し使い勝手を良くしたいと思っています。 もう一つだけお願い出来ますでしょうか?まだやった事もなく何冊かの書籍も目を通しましたが、ケースが見当たらずお願いしたいのですが・・度々ですみません。宜しくお願い致します。

同一ユーザーフォーム内にテキストボックス1つとコンボボックスが3つありテキストボックス(スピンボタン)を初期化しています。ここにコンボボックスのリストをセットしようとするとエラー(オブジェクトが必要です)がでてしまいます。残りの2つのコンボボックスにもリストをセットしたいのですが、どのようにしたら良いのかお願い致します。

Private Sub UserForm_Initialize()
  With SpnDate
    .Min = DateValue("1900/1/1")
    .Max = DateValue("9999/12/31")
    .Value = Date
  End With
  With ComboBox6Date
    .Value = Worksheets("Sheet1").Cells(i + 2, 2).Value
  End With
End Sub

With ComboBox6Date 以下でエラーになってしまいます。宜しくお願い致します。

【50034】Re:ご迷惑をお掛けしっぱなしですみませ...
発言  Lindy  - 07/7/5(木) 9:17 -

引用なし
パスワード
   ▼かずお さん:
おはようございます。

やりたい事があまり良くわからないので
はっきりとお答えできませんが・・・

オブジェクトが必要です。というエラーが出ているようなので
1つチェックしてみて頂きたいのは
このコードが書かれているユーザーフォームにあるコンボボックスの名前は ComboBox6Date かをチェックされてみてください。

あと・・・

>With ComboBox6Date
> .Value = Worksheets("Sheet1").Cells(i + 2, 2).Value
>End With

ここの部分ですが、変数iはどこで定義されているのでしょうか?
それにValueを指定するだけではコンボボックスに1つ表示されるだけで
リスト選択のようには使用できません。

With ComboBox6Date
 .RowSource = "B1:B10"
End With

のようにRowSourceプロパティにセル範囲を設定するか

With ComboBox6Date
 For i = 1 To 10
  .AddItem ThisWorkbook.Sheets("Sheet1").Cells(i, 2).Value
 Next i
End With

のようにAddItemメソッドで1つづつ追加していきます。

【50040】Re:ご迷惑をお掛けしっぱなしですみませ...
お礼  かずお E-MAIL  - 07/7/5(木) 16:47 -

引用なし
パスワード
   Lindyさんお忙しいところを大変申し訳有りませんでした。不具合を直しながらシートも修正しながらと、煩雑なやり方でご迷惑をお掛けしましたことを申し訳なく思っております。

RowSourceプロパティでまとめることができました。有難うございました。
AddItemメソッドにつきましてもこれからやってみようと思っています。

ノウハウまでご伝授頂き大変にご無理を願いました。これからは基本に忠実に検証を重ねていきたいと思います。本当に有難うございました。

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