VBA仙人様ご教授お願い致します。

1フォルダに数十のログファイル(.txt)が格納されています。
1ファイルは3~5万行記述あります。
これを1つのExcelファイルにしたいと思っています。

VBA流れとして
(1)ログ格納フォルダを選択
(2)ログファイル名を取得
(3)既存Excelファイルに(2)で取得したファイル名(.txt除いた)で順次シートを追加
(4)ログファイル=シートとなるようにファイル読み込み/貼り付け
(5)ログファイルを閉じる

VBAイメージ
格納フォルダ:C:\test
\test内    :A001.txt,A002.txt,B003.txt・・・・・・・・Z051.txt(このフォルダにはログのみ格納)
C:デスクトップ\集計マクロ.excel (VBAの記述のあるExcelシートにはSheet1のみが存在)

VBA前
集計マクロ.excel/Sheet1
VBA実行後
集計マクロ.excel/Sheet1,A001,A002,B003,D004・・・・・・・・・Z051が追加、シート毎にログ情報記載

単一ファイルの読み込み/ファイル名をシート名に付与/情報コピペ/ファイル閉じについては、
作成できたのですが、複数ファイルの場合のファイル名を順次取得し、シート名として付与するなど
objやValiant変数などで試行錯誤しましたが解決できず、こちらに質問されていただきました><
このVBAで作成されたシートからの集計マクロについては完成していますが、
その手前でつまづいています><
ご教授のほどお願い致します><

このQ&Aに関連する最新のQ&A

A 回答 (5件)

#3です。


Set destRange = sh.Range("A1").Resize(UBound(buf) + 1, 1)
が正しいです。試験したファイルは最後にもCrLfが入っていたため、見落としてしまい申し訳ありません。
改行コードCrLfが一個も入っていないファイルの場合、UBound(buf)が0となるため、ご指摘のエラーになります。

また、行の区切りがCrLfでない場合は、
Const delimiter As String = vbCrLf
の所を、vbLfなのか、その他の任意の文字か分かりませんが、それに変更する必要があります。

行の区切りと、セルの区切りがある場合は、下記の様にできると思います。ただし、すべての行の要素数が同じとします。
buf = Split(textFile.ReadAll, delimiter)
buf2 = Split(buf(0), cellDelimiter)
Set destRange = sh.Range("A1").Resize(UBound(buf) + 1, UBound(buf2) + 1)
For i = 0 To UBound(buf)
destRange.Rows(i + 1) = Split(buf(i), cellDelimiter)
Next i
    • good
    • 0

ご苦労様です。



単一ファイルでできたのであれば、それをループさせるだけだとは思いますが、
Excelで複数ファイルを立ち上げて「終了」させるにはきちんとExcelオブジェクトを順に終了させていかなければ
できないことがあります。
そのためにはExcelオブジェクトのApp→workbook→worksheet→cellとアクセスし、終了させるときはその逆に終了させていく
(オブジェクトを解放する)ようにしなければExcelが終了しません。

やりたいことはテキストファイルの合体だと思うのですが、既にツールがあります。
    • good
    • 0
この回答へのお礼

助かりました^^ありがとうございます><

お礼日時:2011/09/04 01:43

この手の事はFileSystemObjectを使うと便利です。

詳細は参照URLをご覧下さい。
ファイルリスト取得はDirでも良いのですが、全部FSOでやってみました。
xl2000で試しています(少数&小さなファイルですが...)。ご参考まで。
Sub treatAllFiles()
Dim FSO As Object, targetFolder As Object, targetFile As Object
Dim textFile As Object
Dim folderName As String
Dim sh As Worksheet
Dim destRange As Range
Dim buf As Variant
Const delimiter As String = vbCrLf

folderName = "C:\test"
Set FSO = CreateObject("Scripting.FileSystemObject")
Set targetFolder = FSO.getfolder(folderName)
For Each targetFile In targetFolder.Files
DoEvents '途中でやめたくなった時のための保険
If UCase(FSO.GetExtensionName(targetFile)) = "TXT" Then
Set sh = ThisWorkbook.Sheets.Add
sh.Name = FSO.getbasename(targetFile)
Set textFile = FSO.OpenTextFile(targetFile)
'この部分は速いかなと思って少々奇を衒ってみましたが、メモリ容量上問題が出る場合は、ReadLineで一行ずつ読みこんで処理してください。一行を一つのセルに収納する前提です。複数に分ける場合は、追加の処理が必要です。
buf = Split(textFile.ReadAll, delimiter)
Set destRange = sh.Range("A1").Resize(UBound(buf), 1)
destRange = Application.Transpose(buf)
Set textFile = Nothing
End If
Next targetFile
Set FSO = Nothing
End Sub

参考URL:http://officetanaka.net/excel/vba/filesystemobje …

この回答への補足

ご教授有難うございます。
ご提供いただいたマクロについて一日解読致しました。
私が途中まで自力で作成したものはとてつもない行数のものでした・・・
実データにて検証致しましたが、マクロ内Set destRange = sh.Range("A1").Resize(UBound(buf), 1)のフォルダ内最初のファイル名でシートが作成されたところでで”オブジェクト定義エラー”となりマクロが停止してしまいました。
テキストログ内にはExcelで区切りせりできるよう、Shellでテキスト内にブランクを挿入して分割しています。これがspilt処理の際に支障となり本件のエラーになっているのでしょうか?
引き続きデバッグを試みますが、mitarashiさん方で原因が分かればお時間あるときに教えてください。よろしくお願いします。

補足日時:2011/04/24 22:36
    • good
    • 0

質問の説明が丁寧なのは良いが、くどくてわかりにくい面もある。


課題は単純で
(1)1フォルダのファイル(名)を順次掴む
(2)(1)のファイルのレコードを順次読んで1つにまとめるなり、エクセルのセルに書き出す
それだけでしょう
(1)のコードはWEBに満ち溢れている
なんでGoogleででも「VBA フォルダ ファイル名 取得」などで照会しないのか。
http://itpro.nikkeibp.co.jp/article/COLUMN/20060 … (FSOの例)ほか多数
それと、質問者は、テキストファイルを扱うVBAに慣れていないのだろう。昔のBasic時代は、何をするにもここから始まったのだが。
ーー
下記例では配列に3つのテキストファイルを指定し、エクセルに書き出している例。3つぐらいの例で勉強したり、テストしたり、質問すれば、後は考えを延長すれば仕舞いなのだ。質問には実際をややこしく説明するのは無駄。
下記例を質問者の場合、FSOのFor Eachで、フォルダの中の1ファイルを捕まえたとき、
そのファイルを見つける繰り返しの中で見つかった場所(コード上の)へ、下記のOpenからCloseまでを入れ子にすればしまい。
その時点ではもちろん、f = Array("test01.txt", "test02.txt", "text7.txt") は不要。
ーーー
Sub test01()
f = Array("test01.txt", "test02.txt", "text7.txt")
i = 1
Open "textx.txt" For Append As #2
For Each fl In f
Open fl For Input As #1
While Not EOF(1)
Line Input #1, a
Print #2, a
Cells(i, "A") = a
i = i + 1
Wend
Close #1
Next
Close #2
End Sub
これはインプトファイルの1行=>アウトプットファイルの1行の集積なので、必要があれば、エクセルの「区切り位置」操作で
各フィールド(=列項目)に分けることも出来る。
一旦上記例の"textx.txt"に当たる集積テキストファイルを作って、最後にエクセルに読ませる手もある。
    • good
    • 0
この回答へのお礼

ご教授ありがとうございます。
精進いたします><

お礼日時:2011/04/24 22:02

フォルダ内のファイル名などの情報を取得する方法の一つとして


Dir()関数で調べてみると たくさんヒットします。
一例ですが、新しいシートで
A1セルに C:\test とフォルダを指定しているとして

Sub Sample1()
Dim buf As String, i As Long
i=6
buf = Dir(Range("A1").Value & "\*.txt")
Do While buf <> ""

Cells(i + 1, 1).Value = buf
i = i + 1

buf = Dir()
Loop
End Sub

を試してみてください。
この部分が理解できたら
Cells(i + 1, 1).Value = buf
i = i + 1
の部分に
>単一ファイルの読み込み/ファイル名をシート名に付与/情報コピペ/ファイル閉じについては、
作成できたのですが
のコードを順次実行させるように置き換えます。

この回答への補足

ご回答有難うございます。
今回の構文を私のマクロに取り入れて試行しておりますが、未だ解決できずです。少し頑張って解決してみます。

補足日時:2011/04/24 22:40
    • good
    • 0

このQ&Aに関連する人気のQ&A

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

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q(Win7)アイコンの縮小版表示をフォルダ毎に設定

(1)あるフォルダーにJPEG写真が入っています。
このフォルダーでは、各ファイルのアイコンを縮小版で表示させたいです。
アイコン表示は、「大」です。

(2)デスクトップにpdfなどのファイルを置いています。
デスクトップのアイコンは、縮小版で表示せず、*.pdfはPDFのアイコンで表示させたいです。

上記(1)のフォルダーから、「ツール」→「フォルダーオプション」→「表示」→「常にアイコンを表示し、縮小版は表示しない」のチェックがありますが、これをチェックすると、(1)も(2)も縮小版表示されなくなります。
チェックをはずすと、(1)も(2)も縮小版で表示されてしまいます。

(1)は、縮小版で、(2)は普通のアイコンで表示させたいのですが、どうすればよいでしょうか?
WindowsXPまでは、各フォルダー毎に設定ができたような記憶があるのですが。


OSは、Windows7(32bit)です。
クラシックテーマにしています。

Aベストアンサー

フォルダごとに縮小表示を使う、使わないということでしょうか。
その場合、設定を変更後、下のほうの適用ボタン→OKボタンではどうでしょう?
私のWin7では、こうした設定が可能です。ただし、上の方のフォルダーに適用をクリックすると、同種のファイルが有るフォルダー全てに適用されてしまいます。

QエクセルVBAでフォルダ内の全ファイルをコピペ

フォルダ内にあるファイルの内、複数を指定して開いて、任意の部分をコピーし、マスターとなるファイルに貼りつける、という作業をVBAで行いたいと思っています。
VBAを全く知らないため、毎回20近いファイルを手で開いてはコピペしなくてはならず困っております。
●あるフォルダ内にあるファイルの形式は全て同じで、10行目まではタイトル欄になっているため、11行目以降の記載がある行だけをマスターとなるファイルにコピペしたいです。
●マスターも同じく10行目まではタイトル欄なので、11行目以降に、他ファイルの11行目以降の内容をどんどん積み上げていく形式にしたいです。
●ファイルの名前は毎回変わるので、フォルダ内の指定されたエクセルファイルのみをコピペ、のような処理にしたいです。
●B列だけは必ず記載がある列なので、そこを参考に11行目から何行目までをコピーすればいいのかを判断できるのかな、と思います。
●貼り付けが完了したらマスター以外の開いたファイルを全て閉じるところまで自動化できたら有難いです。
全くの初心者なため、貼り付けるだけで動くようなものをいただけれると大変助かります。
よろしくお願いいたします。

フォルダ内にあるファイルの内、複数を指定して開いて、任意の部分をコピーし、マスターとなるファイルに貼りつける、という作業をVBAで行いたいと思っています。
VBAを全く知らないため、毎回20近いファイルを手で開いてはコピペしなくてはならず困っております。
●あるフォルダ内にあるファイルの形式は全て同じで、10行目まではタイトル欄になっているため、11行目以降の記載がある行だけをマスターとなるファイルにコピペしたいです。
●マスターも同じく10行目まではタイトル欄なので、11行目以降に、他ファイ...続きを読む

Aベストアンサー

>全くの初心者なため、貼り付けるだけで動くようなものをいただけれると大変助かります。
そこまで甘えないことが上達の早道です。

同じような質問が良くありますよ。最近回答した質問ですが
http://oshiete.goo.ne.jp/qa/7578876.html
http://oshiete.goo.ne.jp/qa/4221547.html
を参考にしてみてください。とは云っても少し、説明しておきますと
●あるフォルダ内にあるファイルの形式は全て同じで、10行目まではタイトル欄になっているため、11行目以降の記載がある行だけをマスターとなるファイルにコピペしたいです。
Sheets("Sheet1").Range("A1:J1000").Copy
の部分が Sheets("Sheet1").Range("A11:J1000").Copy
にすると、11行目からJ1000までに という事になります。
デーやが入っている最終の行を取得する方法はありますが、データを元データの行数がたいしたことなければ

元データが最大1000行までであれば
Range("A1:J1000").Copy
と指定しても、空白がコピーされるだけですので十分ではあります。

●マスターも同じく10行目まではタイトル欄なので、11行目以降に、他ファイルの11行目以降の内容をどんどん積み上げていく形式にしたいです。
Range("A65536").End(xlUp).Offset(1, 0).Select
がA列の最終の行から上へ検索してデータの入っている行の下を探しています。

●ファイルの名前は毎回変わるので、フォルダ内の指定されたエクセルファイルのみをコピペ、のような処理にしたいです。
Dir(Sheets("Sheet1").Range("A1").Value & "\*.xls")
で指定したフォルダのエクセルファイルを順に取得しています。

●B列だけは必ず記載がある列なので、そこを参考に11行目から何行目までをコピーすればいいのかを判断できるのかな、と思います。
Range("A65536").End(xlUp).Offset(1, 0).Select

Range("B65536").End(xlUp).Offset(1, 0).Select
とするとB列の最終行を取得できます。
*但し、B65536 はエクセル2003以前のヴァージョンの最大65536行なので、この様になっています。
エクセル2007以上であれば、 65536 の値が異なります。
バージョンを問わずという事であれば、最終の行を取得する方法があります。


●貼り付けが完了したらマスター以外の開いたファイルを全て閉じるところまで自動化できたら有難いです。
Workbooks(buf).Close SaveChanges:=False
の部分が、上書き保存せずに 閉じる という事です。
更に検討が必要な部分としては、貼り付けの作業を行った後のファイルをどうするかです。
そのままでは、VBAを実行するたびにデータが追加されますしね。
解決案
コピーが終了したら、ファイルごと削除、ほかのフォルダーへ移動させる。

或いは、
データの部分(11行目以下)を削除して保存していく。

或いは、
VBA実行前に、マスターのデータをクリアして、毎回、全てのファイルのデータを
貼り付ける。

とりあえず、ここまでにしておきます。

>全くの初心者なため、貼り付けるだけで動くようなものをいただけれると大変助かります。
そこまで甘えないことが上達の早道です。

同じような質問が良くありますよ。最近回答した質問ですが
http://oshiete.goo.ne.jp/qa/7578876.html
http://oshiete.goo.ne.jp/qa/4221547.html
を参考にしてみてください。とは云っても少し、説明しておきますと
●あるフォルダ内にあるファイルの形式は全て同じで、10行目まではタイトル欄になっているため、11行目以降の記載がある行だけをマスターとなるファイルにコピペし...続きを読む

QMac OS10.9のフォルダアイコンについて。

Mac OS10.9のフォルダアイコンについて。
現在OS10.3.9を使っています。以前OS9.0用のフリーウエアをダウンロードをして起動したところ、9.0用のシステムフォルダーのアイコンがそのフリーウエアのアイコンに書き換えられてしまいました。それ以来、フリーウエア本体とアイコンを削除したにもかかわらずそのアイコンが残っています。削除した時はいったん本来のシステムフォルダーのアイコンに戻るのですが、気が付くとまた書き換えられています。本来のフォルダアイコンに戻したいのでどなたか方法を教えて下さい。フリーウエアの作者の方にメールで訪ねてみたのですが返信が有りません。『がちゃぽん』とかいったタイトルだったように記憶しています。これは嫌がらせソフトウエアなのでしょうか。。。。。
困っています。アドバイスよろしくお願いします。

Aベストアンサー

念のため次のことを試してみてください

・OS9でのデスクトップ再構築(OS9でマシンを起動)
・その9.0のシステムフォルダがクラシック環境用のものなら、クラシック環境設定からデスクトップの再構築
・OSX上からプリバインディング
http://nmuta.fri.macserver.jp/terminal6.html

QVBAの構文 3列置きにコピーして別シートに貼付

VBA入門者です。宜しくお願いします。

以下の作業を、シート(1)~(3)に繰り返したいのです

 
 ◎シート(”レポート”)列A,C,F…40列まで3列置きにコピー
 ◎シート(1)のA3に貼付

初歩的な構文だとシートごとに設定するのが大変です(汗)
下の構文をコンパクトにまとめ、
できれば・・・
シート(2)には(B4,B23)~、シート(3)には(C4,C23)~同じ流れでコピペする動作も
まとめたいのです。

  With Worksheets("レポート")

.Range("A4:A23").Copy
Worksheets("1").Range("A3").PasteSpecial xlPasteValues

.Range("C4:C23").Copy
Worksheets("1").Range("B3").PasteSpecial xlPasteValues

.Range("F4:F23").Copy
Worksheets("1").Range("C3").PasteSpecial xlPasteValues

.Range("I4:I23").Copy
Worksheets("1").Range("D3").PasteSpecial xlPasteValues

'……40列まで続く
End With

VBA入門者です。宜しくお願いします。

以下の作業を、シート(1)~(3)に繰り返したいのです

 
 ◎シート(”レポート”)列A,C,F…40列まで3列置きにコピー
 ◎シート(1)のA3に貼付

初歩的な構文だとシートごとに設定するのが大変です(汗)
下の構文をコンパクトにまとめ、
できれば・・・
シート(2)には(B4,B23)~、シート(3)には(C4,C23)~同じ流れでコピペする動作も
まとめたいのです。

  With Worksheets("レポート")

.Range("A4:A23").Copy
Workshe...続きを読む

Aベストアンサー

こんにちは!

>'……40列まで続く
とは「レポート」Sheetの40列(AN列)までというコトでしょうか?
それともデータがある限り3列毎に40回同じ操作を繰り返す!というコトなのでしょうか?
質問文では
A・C・F・I・・・
となっていますので、
A列はそのまま値をコピー&ペーストし、C列以降3列毎というコトですよね?

二つやってみました。
「Sample1」がAN列までで、「Sample2」がデータがある限りC列以降3列毎に40回コピー&ペーストしています。

Sub Sample1()
Dim j As Long, cnt As Long, wS As Worksheet
Set wS = Worksheets("1")
With Worksheets("レポート")
.Range("A4:A23").Copy
wS.Range("A3").PasteSpecial Paste:=xlPasteValues
cnt = 1
For j = 3 To 40 Step 3 '//C列~AN列まで3列毎
cnt = cnt + 1
Range(.Cells(4, j), .Cells(23, j)).Copy
wS.Cells(3, cnt).PasteSpecial Paste:=xlPasteValues
Next j
End With
End Sub

Sub Sample2()
Dim j As Long, cnt As Long, wS As Worksheet
Set wS = Worksheets("1")
With Worksheets("レポート")
.Range("A4:A23").Copy
wS.Range("A3").PasteSpecial Paste:=xlPasteValues
For j = 3 To .UsedRange.Columns.Count Step 3 '//C列~最終列まで3列毎
If cnt = 40 Then Exit For '//40回繰り返したらループから抜ける★
cnt = cnt + 1
Range(.Cells(4, j), .Cells(23, j)).Copy
wS.Cells(3, cnt + 1).PasteSpecial Paste:=xlPasteValues
Next j
End With
End Sub

こんな感じで良いのでしょうか?m(_ _)m

こんにちは!

>'……40列まで続く
とは「レポート」Sheetの40列(AN列)までというコトでしょうか?
それともデータがある限り3列毎に40回同じ操作を繰り返す!というコトなのでしょうか?
質問文では
A・C・F・I・・・
となっていますので、
A列はそのまま値をコピー&ペーストし、C列以降3列毎というコトですよね?

二つやってみました。
「Sample1」がAN列までで、「Sample2」がデータがある限りC列以降3列毎に40回コピー&ペーストしています。

Sub Sample1()
Dim j As Long, cnt As Long, wS As Work...続きを読む

Qフォルダタスクを消したい + 規定のアイコンの画像を抽出したい

フォルダーのアイコンを変更したところ、フォルダを開くとフォルダの右側に『ファイルとフォルダのタスク』『その他』『詳細』などが出るようになってしましました。
以前も同じ失敗をしてその時は何とか消したのですが、今回は幾ら探しても消し方が分りません。
消す方法を教えていただきたいです。

もう一つは、フォルダのアイコンを自分で弄りたいと思っています。
既存のアイコンをちょっと弄るだけのつもりなのですが、既存のアイコンのデーターをどのようにして取り出したらよいのかが分りません。
『C:\WINDOWS\system32\shell32.dll』辺りにあるのは分るのですが、それ以上が分らないです。

どなたか回答してくださるととても助かります。

Aベストアンサー

タスクは
フォルダ上部のツール→フォルダオプション→全般タブの作業→従来のWindowsフォルダを使う にすれば大丈夫だと思います。
もう一つの方法としては

マイコンピュータ右クリックのプロパティ→詳細設定タブのパフォーマンスの設定→視野効果タブでカスタムに→フォルダでよく使用するタスクを使用する。のチェックを外す
で、大丈夫だと思います。
全く別物だったらすいません。左側のタスクなんで(´Д`

アイコンを取り出すとき、私は彩彩畑というフリーソフトを使っていました。Windowsのシステムアイコンも使えたと思います。他にも色々あると思いますが…一応URL貼っときますね

参考URL:http://www.hm.h555.net/~irom/ssb_1/ssb_1.htm,http://www.hm.h555.net/~irom/ssb_help/ssb_help_3.htm

Qシートにマクロ記述があるとシートに貼付ができない

Windows7 Excel2007を使ってマクロ作成中の初心者です。
他の方がwinXP使用してるので、受け渡しのため、互換性のある Excel97-2007で保存・マクロ作成しています。

1)エクセルの新規ブックで、sheet1のセルA1をコピーし、sheet2のA1に貼り付けます。
当然のことながら、正常に貼り付けできます。
貼り付けが完了してもなお、「コピー先を選択しEnterキーを押すか、
貼り付けを選択します。」が表示され続けています。

2)ところがsheet1、sheet2にコードを書くと、(たとえば下のコード)
sheet1のセルA1を右クリックしコピーを選択すると「コピー先を選択しEnterキーを押すか、
貼り付けを選択します。」が表示されます。そしてsheet2に「貼り付け」をしようsheet2の
シート見出しを選んだ瞬間、「コピー先を選択しEnterキーを押すか、
貼り付けを選択します。」の表示が消えてしまい、「貼り付け」ができません。

3)他のシートに貼り付けができないので、シートにマクロがかけないので、困っています。どうしたらいいかお助けください。

Private Sub Worksheet_Activate()
ActiveWindow.DisplayHorizontalScrollBar = False '水平
End Sub

Windows7 Excel2007を使ってマクロ作成中の初心者です。
他の方がwinXP使用してるので、受け渡しのため、互換性のある Excel97-2007で保存・マクロ作成しています。

1)エクセルの新規ブックで、sheet1のセルA1をコピーし、sheet2のA1に貼り付けます。
当然のことながら、正常に貼り付けできます。
貼り付けが完了してもなお、「コピー先を選択しEnterキーを押すか、
貼り付けを選択します。」が表示され続けています。

2)ところがsheet1、sheet2にコードを書くと、(たとえば下のコード)
sheet1の...続きを読む

Aベストアンサー

こんばんは。

こんな風にすれば、回避できますね。


Private Sub Worksheet_Activate()

If Application.CutCopyMode Then Exit Sub '←この1行を加える

ActiveWindow.DisplayHorizontalScrollBar = False '水平

End Sub

QLAN上フォルダのワイヤー付きアイコンをなんと呼ぶのですか?

wXPのマシンに「コンテナxpーAMD」と言うファイル
w2Kのマシンに「コンテナ2kーT100」を作っています。
Explorerで確認すると
C:\Documents and Settings\Administrator\NetHood\
以下の 相手マシンのフォルダーアイコンにはワイヤーの様な物が付いています。これを何ホルダーと呼ぶのですか?
  マシン名にAMDやT100使用。CPUやマザーボード名。

Aベストアンサー

「ネットワークドライブ」や、「ネットワークフォルダ」でいいかと思います。

QエクセルVBAでボタンを作ったシートとVBAを実行するシートを変えたい

シート1にボタンを作成し、
そのボタンを押すと実行するVBAを作成しました。
そこで、VBAを実行するシートの指定はできるのでしょうか。
例えば、ボタンを押すと、
10行から20行まではシート2で実行させ、
30行から40行まではシート3で実行させたいと考えています。
可能でしょうか。
どうぞ宜しくお願いします。


***********************************************
作成したVBA。ボタンはシート1にあります。
***********************************************

Private Sub CommandButton1_Click()


***********************************************
ここからはシート2で実行させたい
***********************************************
Range("E2").Select
ActiveCell.FormulaR1C1 = "10"
Range("E2").Select
Selection.AutoFill Destination:=Range("E2:E101"), Type:=xlFillDefault
Range("E2:E101").Select


***********************************************
ここからはシート3で実行させたい
***********************************************
Range("A2").Select
ActiveCell.FormulaR1C1 = "100"
Range("A2").Select
Selection.AutoFill Destination:=Range("E2:E101"), Type:=xlFillDefault
Range("A2:A101").Select

End Sub

シート1にボタンを作成し、
そのボタンを押すと実行するVBAを作成しました。
そこで、VBAを実行するシートの指定はできるのでしょうか。
例えば、ボタンを押すと、
10行から20行まではシート2で実行させ、
30行から40行まではシート3で実行させたいと考えています。
可能でしょうか。
どうぞ宜しくお願いします。


***********************************************
作成したVBA。ボタンはシート1にあります。
***********************************************

Private Sub CommandB...続きを読む

Aベストアンサー

予期しないエラーを避けるため
シートを直接選択したらどうでしょうか

Private Sub CommandButton1_Click()

Application.ScreenUpdating = False

***********************************************
ここからはシート2で実行させたい
***********************************************
Sheets("Sheet2").Select

Range("E2").Select
ActiveCell.FormulaR1C1 = "10"
Range("E2").Select
Selection.AutoFill Destination:=Range("E2:E101"), Type:=xlFillDefault
Range("E2:E101").Select


***********************************************
ここからはシート3で実行させたい
***********************************************

Sheets("Sheet3").Select

Range("A2").Select
ActiveCell.FormulaR1C1 = "100"
Range("A2").Select
Selection.AutoFill Destination:=Range("E2:E101"), Type:=xlFillDefault
Range("A2:A101").Select

Sheets("Sheet1").Select
Application.ScreenUpdating = True

End Sub

予期しないエラーを避けるため
シートを直接選択したらどうでしょうか

Private Sub CommandButton1_Click()

Application.ScreenUpdating = False

***********************************************
ここからはシート2で実行させたい
***********************************************
Sheets("Sheet2").Select

Range("E2").Select
ActiveCell.FormulaR1C1 = "10"
Range("E2").Select
Selection.AutoFill Destination:=Range("E2:E101"), Type:=xlFillDefault
Range("E2:E101").Selec...続きを読む

Qアイコンを変更したフォルダをサーバーへコピーするとアイコンが戻る…

フォルダのアイコンを、フォルダ>プロパティ>アイコンの変更で、カスタムアイコン(ビットマップ画像に拡張子.icoつけたもの)に変更して、それをサーバーにコピーしたり他の端末にコピーしたら単なる普通のフォルダのアイコンに戻ってしまいます。

どうすれば変更したアイコンのまま他の端末にコピーできるのでしょうか…。誰かご存知の方、教えてください。よろしくお願いします。

OS:Windows XP

Aベストアンサー

カスタマイズ情報はアイコンを変更したフォルダ内のdesktop.iniに保存されています。

検証していませんが、次の手順でアイコンを変更すればうまくいくかもしれません。
よければ試してみてください。

(1)適当なフォルダで「ツール」→「フォルダオプション」の「表示」タブで
「すべてのファイルとフォルダを表示する」にチェックを入れます。
「保護されているオペレーションシステムファイルを表示しない」のチェックを外しま

(desktop.iniを表示するため)

(2)アイコンを変更したいフォルダにカスタムアイコン(例:hoge.ico)をコピーし、「プロパティ」で「隠しファイル」にチェックを入れます(フォルダオプションの設定を元に戻したときカスタムアイコンを非表示に)。

(3)「プロパティ」の「アイコンの変更」で(2)でコピーしたカスタムアイコン(hoge.ico)を指定します。これでフォルダ内にdesktop.iniが作成されます。

(4)desktop.iniをダブルクリックして開きます。
IconFile=・・・\hoge.ico

IconFile=hoge.ico
とファイル名だけに変更し上書き保存します。

(5)フォルダオプションの設定を元に戻します。

カスタマイズ情報はアイコンを変更したフォルダ内のdesktop.iniに保存されています。

検証していませんが、次の手順でアイコンを変更すればうまくいくかもしれません。
よければ試してみてください。

(1)適当なフォルダで「ツール」→「フォルダオプション」の「表示」タブで
「すべてのファイルとフォルダを表示する」にチェックを入れます。
「保護されているオペレーションシステムファイルを表示しない」のチェックを外しま

(desktop.iniを表示するため)

(2)アイコンを変更したいフォルダにカ...続きを読む

Qtatsu99様 VBA勤務管理表の業務割り振りプログラムについてご教示お願い致します

tatsu99様 昨日は「VBAシフト表における従業員の固定休のプログラムについて」の件ありがとうございました。
従業員の休みに対応したVBAプログラム、活用させていただいております。
昨日の今日で大変申し訳ないのですが、今回の質問は勤務管理表の休み以外のセルに、設定シートにある従業員の担当業務を勤務管理表シートに割り振りするプログラムについてご教示頂きたく質問致しました。

添付した画像を例に構築したいVBAプログラムをご説明させていただきます。
日にちは14日から一ヶ月とします。
上段の設定シートと下段の勤務管理表シートは同じExcelファイルになります。キャプチャする為に分割致しました。
設定シートの表は各従業員の担当業務になります。
それを勤務管理表の「休」以外のセルに優先1の業務をそれぞれの担当者に出力。
一日の業務には必ず「会議」、「事務」、「営業」を組み込みます。
14日を例としますと「営業」担当のCさんが休みの為、Eさんが「営業」担当になります。
17日は「会議」担当のBさんがお休みの為、Aさんが「会議」担当になります。
この様に「休」のセル以外に、担当常務を割り振るプログラムとその担当者が休みの場合に違う担当者が変わりを勤めるプログラムを作成したい内容になります。
また文字の色の条件を「サポート」は赤、「会議」は緑、「営業」は黄色、「事務」は水色と設定をしたいです。
勤務管理表の休みの関係で担当業務の「会議」、「営業」、「事務」を出力した際に重複があった場合はMsgBoxで「重複があります!」のメッセージを。また背景を赤で表示させたいです。

以上が私が構築したいプログラムの内容になります。

tatsu99様 よろしくお願い致します。

tatsu99様 昨日は「VBAシフト表における従業員の固定休のプログラムについて」の件ありがとうございました。
従業員の休みに対応したVBAプログラム、活用させていただいております。
昨日の今日で大変申し訳ないのですが、今回の質問は勤務管理表の休み以外のセルに、設定シートにある従業員の担当業務を勤務管理表シートに割り振りするプログラムについてご教示頂きたく質問致しました。

添付した画像を例に構築したいVBAプログラムをご説明させていただきます。
日にちは14日から一ヶ月とします。
上段の...続きを読む

Aベストアンサー

下記URLに記述しました。
http://climbi.com/b/10180/0
標準モジュールに登録してください。他のマクロとはべつのモジュールに登録してください。

設定シート記入時の条件です。
1)優先1で業務の重複不可
2)優先1=ヘルプの場合、優先2~優先4は空白扱いとする。(設定しても無視する)
3)優先1=サポートの場合、優先2~優先4迄、全て設定してあることが必須。
4)優先1=会議、又は事務又は営業の場合(以降専従要員とする)
  優先2~優先4は設定してもしなくても良い。
  (優先Nが空白の場合、以降の優先の指定は無視する)

業務を割り付けるときの手順です。
空白の欄が割りつけ可能なセルになります。このセルに「休」などの文字が設定されている場合は、業務を割りつけません。
「休」以外の文字も割り付け不能なセルとして扱います。
1)1人出勤の場合、
 会議、事務の何れかが割り付け可能なら、優先順位に従い、どちらかを割り付ける。
 上記以外の場合は、空白を割り付ける。
2)2人出勤の場合
 ①会議及び事務の割り付けが可能なら、以下の方法に従う。
  一方がどちらかの業務しか割り当てられない場合は、その業務を割り当て、他方に別の業務を割り当てる。
  両方がどちらの業務も割り当てられるなら、高い方の会議の優先順位を持つものに会議を割り当て、他方に事務を割り当てる。
  会議の優先が両方同じなら、高い方の事務の優先順位を持つものに事務を割り当て、他方に会議を割り当てる。
 ②上記①ができない場合は、以下の処理をする。
  一方が会議も事務も割り付け不能なら空白とし、残りの他方に1人出勤のケースを適用する。
 (他方は会議、事務、空白の何れかになる)
  上記以外は、以下の処理をする。(両方会議のみ割り当て可能、又は両方事務のみ割り当て可能)
  割り当て可能な業務について高い方の優先順位を持つ方にその業務を割り当て、他方は空白とする。
3)3人出勤の場合
 ①1人がヘルプの場合は、その人に空白を割り当てる。残りの2名については2人出勤のケースを適用する。
  上記で終了
 ②専従要員3人の場合、優先1の業務を3人に割り当てる。
  上記で終了
 ③専従要員2人、サポート要員1の場合
  専従要員2人に優先1の業務を割り当て、残りの業務をサポート要員に割り当てる。
  上記で終了。
4)4人出勤の場合
 ①1人がヘルプの場合は、その人にヘルプを割り当てる。残りの3人は、3人出勤のケースを適用する。
  上記で終了
 ②上記以外(専従員3人、サポート要員1人の場合)
  専従要員3人の場合、優先1の業務を3人に割り当てる。サポート要員にはサポートを割り当てる。
  上記で終了
5)5人出勤の場合
 ①専従要員3人に優先1の業務を割り当てる。サポート要員にはサポートを割り当てる。ヘルプ要員にはヘルプを割り当てる。

不具合があれば、連絡ください。できるだけ対応します。但し、仕様の変更及び追加についてはご遠慮ください。
今回は対応しましたが、今後は私宛に質問&依頼をされましても回答できる保証はありませんのでご了承ください。

下記URLに記述しました。
http://climbi.com/b/10180/0
標準モジュールに登録してください。他のマクロとはべつのモジュールに登録してください。

設定シート記入時の条件です。
1)優先1で業務の重複不可
2)優先1=ヘルプの場合、優先2~優先4は空白扱いとする。(設定しても無視する)
3)優先1=サポートの場合、優先2~優先4迄、全て設定してあることが必須。
4)優先1=会議、又は事務又は営業の場合(以降専従要員とする)
  優先2~優先4は設定してもしなくても良い。
  (優先Nが空白の場合、以...続きを読む


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

おすすめ情報