ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

EXCEL VBAコミュの教えてください

  • mixiチェック
  • このエントリーをはてなブックマークに追加
以下のロジックにおいて、シートが新規作成されますが
そのシート名は"設定"シートに記述されたファイル名から
取得しています
これを新規作成されたシートのセル番地"A2"の値をシート名として
設定したいのですが、うまくいきません
どなたか教えて頂けますでしょうか
よろしくお願い致します

Sub てすと()
Set MSht = ActiveWorkbook.Sheets("設定")
MyBook = ActiveWorkbook.Name

a = BrowseForFolder("抽出対象。", True, "参照", "")
b = 2
i = 2
While MSht.Range("A" & b) <> ""
Sheets.Add
Nsht = ActiveSheet.Name
Sheets(Nsht).Name = MSht.Cells(b, "A")
Set wSht = ActiveWorkbook.ActiveSheet
wSht.Cells(1, 1) = "シート名"
knm = 2
While MSht.Cells(1, knm) <> ""
wSht.Cells(1, knm) = MSht.Cells(1, knm)
knm = knm + 1
Wend
b = b + 1

TgtFle = MSht.Range("A" & i) & ".xls"
Workbooks.Open Filename:=a & "\" & TgtFle, ReadOnly:=True
TgtBook = ActiveWorkbook.Name

j = 1: r = 2: x = 1
While Workbooks(TgtBook).Sheets.Count >= j
k = 2:
If Workbooks(TgtBook).Sheets(j).Name Like "変更履歴*" = False Then
wSht.Cells(r + j - 2, 1) = Workbooks(TgtBook).Sheets(j).Name
While MSht.Cells(i, k) <> ""
If wSht.Cells(x, k) = Workbooks(TgtBook).Sheets(j).Range(MSht.Cells(i, k)) Then
wSht.Cells(r + j - 2, k) = "○"
Else
wSht.Cells(r + j - 2, k) = "×"
End If
k = k + 1
Wend
End If
j = j + 1
Wend
r = r + 1
Workbooks(TgtBook).Close SaveChanges:=False
i = i + 1
Wend
End Sub

コメント(13)

>キヨシさん
確かにこの行でシート名を指定してます
一応、現状はこのような状態でして、このロジックに削除や加筆を
行って希望通りにしたいんです
>コメントをしてくださった皆様
たくさんのご指導ありがとうございます
皆さんのアドバイスを参照に自分でも挑戦してみます
また、何かおわかりでしたら教えてくださいませ


If Workbooks(TgtBook).Sheets(j).Name Like "変更履歴*" = False Then
wSht.Cells(r + j - 2, 1) = Workbooks(TgtBook).Sheets(j).Name

尚、上記のロジックで、オープンしたファイルに変更履歴という
シートが無く、違う名前のシートがある場合に新規作成されたシートの
A2にシート名が返されるようなロジックです
よろしくお願いします
> かみちゃんさん

私もそのようにコードを入れればいいだけだと思います。


> くれすさん

疑問点がいくつかあります。
1) 変数MyBookはどこにも使われていませんが、今後使う予定ですか?
2) knm=2の次から始まるWhile...Wendについて、コピー&ペーストの方が速い気がするのですが、ループにしている理由はあるのでしょうか?
3) 変数bとiの違いは何でしょう?同じに見えるのですが・・・。(b=b+1からi=i+1の間で変数bが使われていないので)
>かみちゃんさん
>Yujinさん

お二方のご指摘通りロジックを書き換えたら、望み通りの
シート名が取得できました
ありがとうございました

>Yujinさん
申し訳ありません
本当に素人で、他人様が作ったロジックを使って書き換えろ
だなんて指令を受けたもので、違いがよくわかってないんです
ですので、
1)は多分今後使いません
2)はループにする理由もわかりません
3)は試行錯誤していく内に変数として定義しましたがなぜ定義したのか
自分でもわかっていません
本当に答えになっていなくて申し訳ございません
> くれすさん
そうですか。
元コードが他の方のものだったんですね。
そういう事情なら仕方ないかもしれませんが、これを機にちょっと勉強してみてもいいかもしれませんね。
まだ改良できる部分はあると思いますので。

ログインすると、みんなのコメントがもっと見れるよ

mixiユーザー
ログインしてコメントしよう!

EXCEL VBA 更新情報

EXCEL VBAのメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。