Excel VBA質問箱 IV

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

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


77 / 3841 ページ ←次へ | 前へ→

【80948】Re:2回に1回エラーが出る
お礼  さと  - 19/6/24(月) 22:13 -

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

Range("B2").CurrentRegionの次の行に
変数の宣言を入れ込んだら、エラーが出なくなりました。
連続して行う場合、前の処理のセレクト部分が
変数に反映されていると考えたら分かりやすかったです。

ありがとうございました。
・ツリー全体表示

【80947】等幅忘れた。
発言  Jaka  - 19/6/24(月) 18:05 -

引用なし
パスワード
   >   For Each ws In Worksheets
>          ↑
>        .がない。

と書いたくせに、入れてなかったので、その辺注意。
・ツリー全体表示

【80946】あ・・・・。
発言  Jaka  - 19/6/24(月) 18:02 -

引用なし
パスワード
   こっちの方が・・・・
下にある、end with、end if も入れ替えてね。

>   If ws.Name = "A" Then
>    With ws
    ↓
   With ws
     If .Name = "A" Then

>   For Each ws In Worksheets
>          ↑
>        .がない。

と書いたくせに、入れてなかったので、その辺注意。
・ツリー全体表示

【80945】Re:指定のシートがあれば処理を行い、無...
お礼  fika  - 19/6/24(月) 12:44 -

引用なし
パスワード
   ▼Jaka さん:
直ぐに回答をありがとうございます!

フラグのところ、仰る通りややこしくなりました。。
フラグを立てる、降ろす一文、なるほど。。勉強になります。

そしてJakaさんがアドバイスしてくださったコードが
スッキリして解りやすいです!
フラグを使わない方法はこのようになるのですね。

お蔭さまで無事に処理が進みました!
ありがとうございます!

とても勉強になりました。


============
>>  With Workbooks.Open(f)
>>   For Each ws In Worksheets
>          ↑
>        .がない。
>     Openしたばかりのアクティブブック対象となるので
>     同じようのは動くけど。
>
>この辺↓、なんかフラグつかったりごちゃごちゃしすぎに感じません?
>
>>  For Each ws In Worksheets
>>   If ws.Name = "A" Then flag = True
>>  Next ws
>>  If flag = False Then Close
>>  If flag = True Then
>   
>>    With .Worksheets("A")
>
>こんな感じで良いと思うけど?
>
>  For Each ws In Worksheets
>   If ws.Name = "A" Then
>    With ws
>       i = 2
>      Do While .Cells(i, 1).Value <> ""
>         Sheet1.Cells(j, 1).Value = .Cells(i, 1).Value
>         Sheet1.Cells(j, 2).Value = .Cells(i, 2).Value
>         Sheet1.Cells(j, 3).Value = .Cells(i, 3).Value
>         Sheet1.Cells(j, 4).Value = .Cells(i, 4).Value
>         Sheet1.Cells(j, 5).Value = .Cells(i, 5).Value
>         Sheet1.Cells(j, 6).Value = .Cells(i, 6).Value
>         Sheet1.Cells(j, 7).Value = .Cells(i, 7).Value
>         Sheet1.Cells(j, 8).Value = .Cells(i, 8).Value
>         Sheet1.Cells(j, 9).Value = .Cells(i, 9).Value
>         Sheet1.Cells(j, 9).Value = .Cells(i, 10).Value
>         i = i + 1
>        j = j + 1
>      Loop
>     end with
>   end if
>  next
>
>因みに
>フラグを立てる flag = True
>フラグを降ろす flag = False
>   (下すって変換されちゃってたけど)
・ツリー全体表示

【80944】Re:指定のシートがあれば処理を行い、無...
発言  Jaka  - 19/6/24(月) 10:41 -

引用なし
パスワード
   >  With Workbooks.Open(f)
>   For Each ws In Worksheets
          ↑
        .がない。
     Openしたばかりのアクティブブック対象となるので
     同じようのは動くけど。

この辺↓、なんかフラグつかったりごちゃごちゃしすぎに感じません?

>  For Each ws In Worksheets
>   If ws.Name = "A" Then flag = True
>  Next ws
>  If flag = False Then Close
>  If flag = True Then
   
>    With .Worksheets("A")

こんな感じで良いと思うけど?

  For Each ws In Worksheets
   If ws.Name = "A" Then
    With ws
       i = 2
      Do While .Cells(i, 1).Value <> ""
        Sheet1.Cells(j, 1).Value = .Cells(i, 1).Value
        Sheet1.Cells(j, 2).Value = .Cells(i, 2).Value
        Sheet1.Cells(j, 3).Value = .Cells(i, 3).Value
        Sheet1.Cells(j, 4).Value = .Cells(i, 4).Value
        Sheet1.Cells(j, 5).Value = .Cells(i, 5).Value
        Sheet1.Cells(j, 6).Value = .Cells(i, 6).Value
        Sheet1.Cells(j, 7).Value = .Cells(i, 7).Value
        Sheet1.Cells(j, 8).Value = .Cells(i, 8).Value
        Sheet1.Cells(j, 9).Value = .Cells(i, 9).Value
        Sheet1.Cells(j, 9).Value = .Cells(i, 10).Value
        i = i + 1
        j = j + 1
      Loop
     end with
   end if
  next

因みに
フラグを立てる flag = True
フラグを降ろす flag = False
   (下すって変換されちゃってたけど)
・ツリー全体表示

【80943】Re:指定のシートがあれば処理を行い、無...
発言  fika  - 19/6/24(月) 8:24 -

引用なし
パスワード
   ▼Jaka さん:
>あまりよく見てないけど・・・・。
>
>>  If flag = False Then Close
>             ↑
>          .が足りない。

Jakaさん、ありがとうございます!
.を付けてみましたが、with .worksheets("A") のところで止まり、
インデックスが有効範囲にありません。が出ました。。

flag を下すということですね。。
探してみます!
・ツリー全体表示

【80942】Re:2回に1回エラーが出る
発言  γ  - 19/6/24(月) 7:23 -

引用なし
パスワード
   横から失礼する。
■19/6/23(日) 19:23のコードでは、
無造作に
 a = Selection.Rows.Count
 b = Selection.Columns.Count
で始まっている。
そのとき何が選択されているから分かったものじゃない。
前の処理で、最終的にSelectされるものが前提になっているとすると、
Selection.Resize(Selection.Rows.Count - 6, Selection.Columns.Count - 1).Select
で大きさが縮んだものになっているのではないか。

■一方で、19/6/23(日) 20:30のコードでは、
Selectionの大きさは、Range("B2").CurrentRegionに由来しているものになっている。
だから上記のようなことは起きない。

両者は明確に違うと思う。どうすればよいかは自ずと明らかでしょう。
・ツリー全体表示

【80941】Re:2回に1回エラーが出る
発言  さと  - 19/6/23(日) 22:29 -

引用なし
パスワード
   ▼マナ さん:

期待通りの動作はしています。
動作はしていますが、エラーで出るので
何か問題があるのではと気になり、質問しました。
何かコードに問題があるのかと…

エラーが出ることは別の話という考えがありませんでした。
動作はしているので、そういうものだと理解します。

色々と、ご指摘ありがとうございました。
・ツリー全体表示

【80940】Re:2回に1回エラーが出る
発言  マナ  - 19/6/23(日) 22:12 -

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

>.Range("B2").CurrentRegion で選択された範囲が
>4以上なら問題ないということで良いでしょうか?

エラーがでないということと
期待通りの動作をするということは別です。

で、わたしには、何をしようとしているか理解できていません。

そのマクロで、どういう結果になることを期待していますか。
・ツリー全体表示

【80939】Re:2回に1回エラーが出る
発言  さと  - 19/6/23(日) 21:57 -

引用なし
パスワード
   ▼マナ さん:

.Range("B2").CurrentRegion で選択された範囲が
4以上なら問題ないということで良いでしょうか?
・ツリー全体表示

【80938】Re:2回に1回エラーが出る
発言  マナ  - 19/6/23(日) 21:31 -

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

では、以下は a で問題ないですか。

>    .Range("B2").CurrentRegion.Offset(2, 1).Select
>    Selection.Resize(a - 3, b - 1).Select

 
・ツリー全体表示

【80937】Re:2回に1回エラーが出る
発言  さと  - 19/6/23(日) 21:01 -

引用なし
パスワード
   ▼マナ さん:

前半部分は、
B2が選択されてaがその行数となるので
メッセージボックスに1が表示される。

後半部分は、
B2を含む範囲が選択されて、その選択範囲がoffsetで
行と列が移動して、その状態の選択範囲の行数が
メッセージボックスに表示される。

このように理解しています。
・ツリー全体表示

【80936】Re:2回に1回エラーが出る
発言  マナ  - 19/6/23(日) 20:43 -

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

以下のマクロの実行結果が理解できますか。

Sub test()
  Dim a As Long
  
  Sheets("7月").Activate
  Range("B2").Select
  
  a = Selection.Rows.Count
  
  MsgBox Selection.Rows.Count
  MsgBox a

  Range("B2").CurrentRegion.Offset(2, 1).Select
 
  MsgBox Selection.Rows.Count
  MsgBox a
 
End Sub
・ツリー全体表示

【80935】Re:2回に1回エラーが出る
発言  さと  - 19/6/23(日) 20:30 -

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

指摘内容を確認してみたのですが改善されませんでした。
まだ私が内容ををしっかり理解できていないせいかもしれないですが…

以下のように変数の宣言を使用しないように試してみったら、全くエラーが出ません。
変数の宣言の仕方がおかしいのでしょうか?
何か分かることありましたらご教授願います。


Sub 当月入力準備()
  Application.ScreenUpdating = False
  With Sheets("7月")
    .Range("B2").CurrentRegion.Offset(2, 1).Select
    Selection.Resize(Selection.Rows.Count - 3, Selection.Columns.Count - 1).Select
    Selection.Copy
    .Range("B2").CurrentRegion.Offset(3, 1).Select
    Selection.Resize(Selection.Rows.Count - 3, Selection.Columns.Count - 1).Select
    Selection.PasteSpecial xlPasteValues
    .Range("B2").CurrentRegion.Offset(2, 1).Select
    Selection.Resize(Selection.Rows.Count - 6, Selection.Columns.Count - 1).Select
    Selection.ClearContents
  End With
               
End Sub
・ツリー全体表示

【80934】Re:2回に1回エラーが出る
発言  マナ  - 19/6/23(日) 20:04 -

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

>このように2回に1回エラーが出ます。

この原因はわかりませんが

a-6が、1以上でないとエラー
b-1も、1以上でないとエラー

です。Resizeできないので。

あと、7月シートがactiveでないとエラーになります。
・ツリー全体表示

【80933】2回に1回エラーが出る
質問  さと  - 19/6/23(日) 19:23 -

引用なし
パスワード
   マクロ初心者です。
調べても原因が分かりませんでした。
原因が分かる方がいましたら、教えていただきたいです。

1回目にマクロを実行すると「エラー1004」が出ます。
エラー画面で終了を押して、もう一度実行するとエラーが出ず、処理が完了します。
3回目もエラーが出て、4回目はうまくいきます。
このように2回に1回エラーが出ます。

エラーが出るのは、以下のコードです。

Option Explicit

Sub 当月入力準備()
  Application.ScreenUpdating = False
  Dim a As Long, b As Long
  a = Selection.Rows.Count
  b = Selection.Columns.Count
  With Sheets("7月")
    .Range("B2").CurrentRegion.Offset(2, 1).Select
    Selection.Resize(a - 3, b - 1).Select
    Selection.Copy
    .Range("B2").CurrentRegion.Offset(3, 1).Select
    Selection.Resize(a - 3, b - 1).Select
    Selection.PasteSpecial xlPasteValues
    .Range("B2").CurrentRegion.Offset(2, 1).Select
    Selection.Resize(a - 6, b - 1).Select
    Selection.ClearContents
  End With
End Sub
・ツリー全体表示

【80932】Re:数値が入っていない行を削除する
発言  マナ  - 19/6/22(土) 9:22 -

引用なし
パスワード
   ▼と金 さん:

フィルターで空白セルのみ抽出して削除
という方法もあります。
・ツリー全体表示

【80931】Re:数値が入っていない行を削除する
発言  マナ  - 19/6/21(金) 19:43 -

引用なし
パスワード
   ▼と金 さん:

>C列の単価には数値が入っている列と入っていない列が混在する時
>数値が入っていない行を削除するにはどうしたらいいでしょうか?

1)C列を選んで、ジャンプ機能で空白セルを選択
2)行全体を削除

>シート1〜シート10まで同時に消す場合もお教え下さい

同じこと、各シートで繰り返せばよいです。
わたしなら、手作業でやっちゃいますが、
マクロでも同じ手順で考えると良いです。
・ツリー全体表示

【80930】数値が入っていない行を削除する
質問  と金  - 19/6/21(金) 19:22 -

引用なし
パスワード
   ご教授ください
シート1に単純な表、たとえば1行〜30行、A列が名称、B列が数量、C列が単価、〜D列が金額
というシートが有るとします

C列の単価には数値が入っている列と入っていない列が混在する時
数値が入っていない行を削除するにはどうしたらいいでしょうか?


シート1〜シート10まで同時に消す場合もお教え下さい
宜しくお願い申し上げます
・ツリー全体表示

【80929】Re:グラフ書式の統一
発言  マナ  - 19/6/21(金) 19:10 -

引用なし
パスワード
   ▼しょしんしゃ さん:

書式をコピーするのではなく、
コピーしたい書式を、マクロで設定できないのですか。
・ツリー全体表示

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