dポイントプレゼントキャンペーン実施中!

4つのPCでマクロを動かし、1つのPCで出力結果が異なってしまいました。
少しずつコードを動かしたところ以下★★★で差異が見られました。
ですが、マクロ初心者なもので何故出力結果が違うのか見当がつきません。詳しい方教えてください!!
<出力結果の違い> 
3つのPCでは複数ファイルを読み込ませて複数行結果が出力される、F列にデータ有(理想の結果)
1つのPCでは複数ファイルを読み込ませても1行しか結果が出てこない
F列のデータが空白
PCのバージョンなどは4つ全て同じで確認済みです。


↓文字数の関係で色々過程を省略しました(ここに問題があるのでは?と思う部分を残しています)

Sub データ修正()
'カレントディレクトリを以下に変更
ChDir ("C:\Users\Aiba\Desktop\work\マクロ\log")

'フォルダのパスを表示
'MsgBox CurDir("C:")

Dim fName As Variant

'k はファイルの個数を表す
Dim k, IRow, ICol, hina_Row, hina_Col As Long

Dim wb, wb_test As Workbook

Application.ScreenUpdating = Flase


'アクティブブックと同じ場所に保存されている”データ修正ひな型.xlsx”を開く
'Workbooks.Open Filename:=ThisWorkbook.Path & "\データ修正ひな型"
Set wb_test = Workbooks.Open(ThisWorkbook.Path & "\データ修正ひな型")

'ファイルを複数選択して開く
fName = Application.GetOpenFilename(FileFilter:="Excelブック,*.xlsx*", MultiSelect:=True)


If IsArray(fName) Then
'選択されたファイルへの処理
For k = LBound(fName) To UBound(fName)
Set wb = Workbooks.Open(fName(k))
'-------- ここ以降に、wbに対する処理を書く --------

'B列が空白の場合行ごと削除する
Dim intRowEnd As Integer '最終行番号を格納
Dim i As Integer '行カウンタ

'最終行番号の取得
intRowEnd = wb.Sheets(1).Cells(Rows.Count, 1).End(xlUp).Row  ←★★★

For i = intRowEnd To 1 Step -1
'B列が空白の場合、行削除
If wb.Sheets(1).Cells(i, 2).Value = "" Then

wb.Sheets(1).Rows(i).Delete

End If
Next

Dim MaxGyou As Long '全体の行数をカウント A1から数える
MaxGyou = wb.Sheets(1).Range("A1").End(xlDown).Row

If MaxGyou = 1048576 Then '元のデータが1行のときは1048576が返る
MaxGyou = 1
End If

Dim Flag_GaitouNashi As Integer '該当件数0フラグ

Flag_GaitouNashi = 0

'---1枚のシートを追加し、名前を変更
wb.Worksheets.Add(After:=wb.Worksheets(1), Count:=1).Name = "修正後"

For i = 1 To MaxGyou
If wb.Sheets(1).Cells(i, 1).Value = wb.Sheets(1).Cells(i, 2).Value Then

Flag_GaitouNashi = 1
wb.Sheets(2).Range("A" & i).Value = "-"

GoTo Label1
End If

Dim tmp As Variant

tmp = Split(wb.Sheets(1).Range("A" & i), "\") ' \で区切られた文字列をtmpに格納
wb.Sheets(2).Range("J" & i).Value = tmp(UBound(tmp))


Label1:
Next i

If Flag_GaitouNashi = 1 Then
wb.Sheets(2).Range("C1").Value = "該当なし"
End If


'ファイルを保存せずに閉じる
Application.DisplayAlerts = False
wb.Close Flase

'次のファイルへ
Next k

wb_test.Sheets(1).Activate
wb_test.Sheets(1).Range("A1").Select

Else
'ファイル選択画面でキャンセルした場合
MsgBox "キャンセルされました"
End If


With wb_test.Sheets(1)
'データシートの行数を調べる
IRow = .Cells(Rows.Count, 1).End(xlUp).Row

.Range("A:L").AutoFilter
.Sort.SortFields.Clear

'優先列1 対象データ列 降順
.Sort.SortFields.Add _
Key:=wb_test.Sheets(1).Cells(1, 1), _
SortOn:=xlSortOnValues, _
Order:=xlDescending, _
DataOption:=xlSortNormal

With .Sort
.SetRange wb_test.Sheets(1).Range(wb_test.Sheets(1).Cells(1, 1), wb_test.Sheets(1).Cells(IRow, 12))
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply

End With

End With

ファイル保存作業省略
Application.ScreenUpdating = True
End Sub

A 回答 (5件)

全く同じファイルで動作確認しているのであれば、


★★★の部分って、結果が異なるとは思えないんですよね。
ただ最終行を取得するだけですから。

intRowEnd = wb.Sheets(1).Cells(Rows.Count, 1).End(xlUp).Row

★★★の行の後に
MsgBox wb.Sheets(1).Name & "-" & intRowEnd
と入れれば、
どのシートを見ていて、その最終行がいくつか
を処理の途中で表示することができます。

それが同じなら、その部分に問題がないことがわかります。


自力解決するなら、
Application.ScreenUpdating = Flase
の先頭に「’」をつけてコメントアウトして処理中の画面の変化をみられるようにし、
マクロにブレークポイントを設定したり、
「F8」キーで1処理ずつステップ実行して変化を追っていったり、
途中で怪しいと思われる変数に対して上で書いたようにMsgbox で表示させて確認したり、
なんて方法を交えて原因を探ることもできると思います。

参考記事

最も基本的なステップ実行 - Excel VBA
https://www.239-programing.com/excel-vba/basic/b …
    • good
    • 0
この回答へのお礼

マクロにブレークポイントを設定して、「F8」キーで処理を追っていきましたが、変数は同じでした。やはりPCに問題がありそうです。ありがとうございました。

お礼日時:2020/12/25 15:42

まったく同じファイルで試しても違う結果が出ましたか?

    • good
    • 0

No3です



>つまり行数がたくさん出てくるはずなのです。
結果から原因を推測するのは必ずしも間違いではないとは思いますが、真の原因を突き止めないと修正しようがありません。

No3にも書きましたが、
>←★★★
の処理で、具体的に求めた行数がどのように異なるのでしょうか?
もしも本当に異なるのなら、その違いがどこから生じているのかを突き止めないと、本当の原因にはたどり着けないと思います。


ご質問とは関係ありませんけれど、ざっと見ただけではありますが、ご提示の処理にも疑問点がいろいろ散見されます。
例えば、行数を扱うのにInteger宣言をしていますが、エクセルの最大行数はIntegerの範囲を超えています。
(まぁ、扱う行数が少なければ問題はないかもですけれど・・・)
あるいは、シート内に一行でも「A列の値=B列の値」となる行が存在すると「該当なし」と判断されるようになっているとか…
(実際に何をなさりたいのかわからないので、これでいいのかも知れませんけれど、普通はこのような扱いはしない場合が多いので)
などなど・・・
    • good
    • 0

こんにちは



ざっとしか見ていませんけれど・・・

>以下★★★で差異が見られました。
違っているなら、その時の値から推測ができそうに思いますけれど、どう違っているのでしょうか?
複数のファイルを順に処理していますが、全部のブックで値が異なるのでしょうか、それとも特定のブックだけ異なる?


しかしながら、仮にご指摘の部分で値が異なっていても、ご提示の処理では、ループ内の処理はOpenしたブックに限定されていて、Closeの際には変更をキャンセルしているので、結果が変わることは無いと思われます。
それとも、どこかの値を保持して別のブックへ転記しているのでしょうか?
(その部分が見当たらない)

仮に、ご提示の処理をそのまま、4つのPCで実行した場合に本当に差異がでるのでしょうか?
なんだか、原因は全然別のところにあるのではという気がしますけれど。
    • good
    • 0
この回答へのお礼

すみません。文字数の関係から過程を省略しすぎました。複数のファイルを読み込んでデータ処理して1つのファイル・シートに保存するマクロなのですが・・・つまり行数がたくさん出てくるはずなのです。
問題有のPCで実行すると、複数ファイルを読み込ませても、ファイル保存されたファイルを開くと1行しか表示されません。3つファイルを読み込ませたら最低でも3行以上は出てこないとだめなのですが。

私自身も問題は別のところにあるような気がします。質問しておいてすみません。

お礼日時:2020/12/24 17:14

全部読む気がしないので


一般的な回答のみ
PCのバージョンとありますが なんのバージョンですかね?
PCごとに環境が違うので 下記を確認する必要があります

1.エクセルのバージョン
2.OS(OSに依存する処理がある場合)
3.デスクトップのパス
  デスクトップのパスはPCごとに違います
  絶対パスで指定する場合には注意
  相対パスにするか、パスを取得してから絶対パスを指定する

ブレークポイントを設定し 1行ごとに変数の値等、
現在の状態を確認すると良いでしょう
    • good
    • 0
この回答へのお礼

回答ありがとうございます。PCのバージョンはOffice365バージョンです。
パスは全て同じに設定してあります。
4つすべて所有者が違うので1つ1つ変数を確認することは難しいのですが時間のあるときに試してみます。

お礼日時:2020/12/24 16:40

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!