Excel VBA質問箱 IV

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

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


13398 / 13644 ツリー ←次へ | 前へ→

【5457】はじめまして、初心者です olive 03/5/14(水) 19:53 質問
【5459】Re:はじめまして、初心者です Be Quit 03/5/14(水) 20:20 回答
【5460】Re:はじめまして、初心者です Be Quit 03/5/14(水) 21:08 回答
【5469】Re:はじめまして、初心者です ひで 03/5/15(木) 11:52 回答
【5492】ファイルコピーマクロについて olive 03/5/15(木) 22:52 質問
【5539】Re:ファイルコピーマクロについて olive 03/5/18(日) 13:50 発言
【5540】Re:ファイルコピーマクロについて りん 03/5/19(月) 6:50 回答
【5541】Re:ファイルコピーマクロについて ひで 03/5/19(月) 10:11 回答
【5576】Re:ファイルコピーマクロについて olive 03/5/20(火) 22:38 お礼
【5593】Re:ファイルコピーマクロについて ひで 03/5/21(水) 14:24 発言
【5602】Re:ファイルコピーマクロについて olive 03/5/21(水) 21:31 お礼

【5457】はじめまして、初心者です
質問  olive  - 03/5/14(水) 19:53 -

引用なし
パスワード
   はじめまして。全くの初心者でてさぐり状態で作ってます。
そこでわからないことだらけで、どなたか教えてくださいませんか!!(^人^)
作成したいマクロは2つあります。
1.ファイルは開かずにファイルコピーするマクロ を作りたいのです。
コピー元ファイルを(Application.GetOpenFilename)で選択形式で選び、
コピー先フォルダを(Application.GetSaveFilename)で選択形式で選び
(FileCopy)でコピーする、 までは成功したのですが、例えばそれを
コピーする回数を(InputBox)で数値を入力させてその回数分コピーしたいのです。
そこで入力した数値分のループ文にしようと思うのですが・・

2.2つめのマクロは、やはりファイルを開かない状態での(テキストファイルなど)
ファイル内の文字列の置換をするマクロです。
単純に、(GetOpenFilename)から置換したい対象のファイルを選択して
それを(Replace)文でできるかと思ったのですが・・・(^^;
構文エラーなどになるのです。
ファイルを開かないで操作するのには限度?というか制限とかあるんでしょうか。
それともエクセルマクロではなく、ファイル名が「〜.exe」となるような
プログラムファイル?に作れますか?全く勝手がわかっていなくてすみません。

【5459】Re:はじめまして、初心者です
回答  Be Quit  - 03/5/14(水) 20:20 -

引用なし
パスワード
   ▼olive さん:
はじめまして。
CreateObjectで可能ではないでしょうか。
違っていたらごめんなさい。

【5460】Re:はじめまして、初心者です
回答  Be Quit  - 03/5/14(水) 21:08 -

引用なし
パスワード
   ▼olive さん:
>1.ファイルは開かずに
  Set ObExc = _
  CreateObject("Excel.Application")
  開いていても、目に見えなくすることが可能。

>2.2つめのマクロは、やはりファイルを開かない状態での(テキストファイルなど)
  OpenTextFileで可能かと思います.

>それともエクセルマクロではなく、ファイル名が「〜.exe」となるような
  ***.vbsというのがあります。

【5469】Re:はじめまして、初心者です
回答  ひで  - 03/5/15(木) 11:52 -

引用なし
パスワード
   ▼Be Quit さん olive さん こんにちは

横から失礼します

>1.ファイルは開かずにファイルコピーするマクロ を作りたいのです。
>コピー元ファイルを(Application.GetOpenFilename)で選択形式で選び、
>コピー先フォルダを(Application.GetSaveFilename)で選択形式で選び
>(FileCopy)でコピーする、 までは成功したのですが、例えばそれを
>コピーする回数を(InputBox)で数値を入力させてその回数分コピーしたいのです。
>そこで入力した数値分のループ文にしようと思うのですが・・

こんなんでしょうか?
まとはずれならごめんなさい

Sub test1()

Dim gn1 As String
Dim gs1 As String
Dim r As Long
Dim N As Long
Dim prompt, Titl, def

prompt = "コピー回数は?"
Titl = "質 問?"    
def = " 1 "

N = InputBox(prompt, Titl, def)

For r = 1 To N

gn1 = Application.GetOpenFilename
gs1 = Application.GetSaveAsFilename
FileCopy gn1, gs1
Next r

End Sub

詳しくはヘルプを見てくださ〜い

【5492】ファイルコピーマクロについて
質問  olive  - 03/5/15(木) 22:52 -

引用なし
パスワード
   Be Quitさん、ひでさん、アドバイスありがとうございます!!
ところで、また質問なのですが、ひでさんに教えていただいたものだと
コピーしたい回数分で1回1回コピー元ファイル、コピー先を聞いてくるのですが、
初めにコピー数を入力した分、自動的に(同じファイルを同じディレクトリの中へ)
コピーさせるには・・・?どうしたらよいのでしょうか。
あと、コピーファイルを選択した時に[cancel]を選んだ時にメッセージを表示しよう
かと思い、
If gn1 = False Then
 MsgBox "キャンセルされました"
 Exit For
End If
と加えてみたのですが、この文を付け足すとファイル選択でOKにすると
「型が一致しません」とのデバックエラーになり、次のコピー先を選択する
ところへ続きませんでした。このIf文は間違いでしょうか。(For文の中にできない
わけではないと思うのですが・・・)
また、同じファイルをコピーするとして自動で(例えば元々のファイル名に001〜
という感じに)名前を付けていくってことはできるんでしょうか?とりあえず、
0詰めで番号を付けるような、Right("000"&n,4)というのは使えるのかなーと考えて
いるんですが・・。

【5539】Re:ファイルコピーマクロについて
発言  olive  - 03/5/18(日) 13:50 -

引用なし
パスワード
   If文の判定が間違っていました。
「False Then」ではなく、
「"" Then」でした。これでIf文でエラーは出なくなりました。
ループがまだ思い通りにはならないけど・・

【5540】Re:ファイルコピーマクロについて
回答  りん E-MAIL  - 03/5/19(月) 6:50 -

引用なし
パスワード
   olive さん、おはようございます。

>「"" Then」でした。これでIf文でエラーは出なくなりました。
>ループがまだ思い通りにはならないけど・・

ループの何がどう思い通りにならないのかはわかりませんが。
皆さんのヒントを元にちょっと工夫してみました。

Sub test1()
  Dim gn1 As Variant
  Dim gs1 As Variant, gs2 As String, gs3 As String
  Dim r As Long, N As Long, prompt, Titl, def
 
  prompt = "コピー回数は?"
  Titl = "質 問?"
  def = " 10 "
 
  N = InputBox(prompt, Titl, def)
  'ファイル名選択
  gn1 = Application.GetOpenFilename
  '分岐1 キャンセルしていたらパス
  If TypeName(gn1) = "String" Then
   gs1 = Application.GetSaveAsFilename
   If TypeName(gs1) = "String" Then
     gs2 = Dir(gn1)
     For r = 1 To N
      '拡張子がきっちり3文字で付いているとして
      '新しいファイル名は元の名前に連番を付けたもの
      gs3 = Left(gs2, Len(gs2) - 4) + _
           "_" + Format(r, "000") _
           + Right(gs2, 4)
      'コピー
      FileCopy gn1, gs3
     Next r
     '
     MsgBox N & "個のファイルを作成しました", vbInformation
   Else
     MsgBox "キャンセルしました", vbExclamation, "コピー先指定"
   End If
  Else
   MsgBox "キャンセルしました", vbExclamation, "コピー元指定"
  End If
End Sub

こんな感じです。

【5541】Re:ファイルコピーマクロについて
回答  ひで  - 03/5/19(月) 10:11 -

引用なし
パスワード
   ▼りん さん olive さん、おはようございます。

ちびちびやってたら回答が遅くなってすいませーん
りんさん回答フォローありがとうございます。
(お久しぶりです・・)

りんさんの回答があるのですが、せっかくつくったので
のせさせてください。

私のつくったのはなんだか、あくせく(^^; 動くコード
で 恥ずかしいのですが・・・

Sub test1()

Dim gn1 As Variant
Dim gs1 As Variant
Dim ps1 As Variant
Dim ps2 As Variant
Dim ps3 As Variant
Dim fn As Variant
Dim k1 As Long
Dim k2 As Long
Dim r As Long
Dim N As Long
Dim s As Long

Dim prompt, Titl, def

prompt = "コピー回数は?"
Titl = "質 問?"
def = " 1 "

N = InputBox(prompt, Titl, def)
gn1 = Application.GetOpenFilename

If gn1 = False Then
MsgBox "キャンセルされました"
Exit Sub
End If

gs1 = Application.GetSaveAsFilename
If gs1 = False Then
MsgBox "キャンセルされました"
Exit Sub
End If

s = 1

Do
ps1 = InStr(s, gs1, "\", 1)
  s = 1 + s
If 0 < ps1 Then
  ps2 = Mid(gs1, s)
End If

Loop Until ps1 = 0

k1 = Len(gs1)
k2 = Len(ps2)
ps3 = Left(gs1, k1 - k2)
fn = Right(gs1, k2)


For r = 1 To N

FileCopy gn1, ps3 & r & "-" & fn

Next r

End Sub

【5576】Re:ファイルコピーマクロについて
お礼  olive  - 03/5/20(火) 22:38 -

引用なし
パスワード
   りんさん、ひでさん、ありがとうございます。m(._.)m
ひでさんのも完璧に動きました。ありがとうございます。
まだ全然関数とかも知らないので、こうしたい時にはこの関数を使える、という
ようなことも全然わからなくて・・・
まずはみなさんの考えてくださったものをちゃんと理解しようとしている所です(^^;
ただひとつ、もう一歩!て思うところがありまして・・
インプットボックスで数値を入力させたところで「キャンセル」ボタンを押した
場合にキャンセルされました、などのメッセージを出そうと思うのですが、
N=InputBox・・・
If N="" Then
 MsgBox "キャンセルされました"
 Exit Sbub
End If
ではだめなんですか?InputBoxではキャンセルで(" ")を返すんだと思っている
のですが・・・?エラーになります。(NはLong型で宣言してます)

あと、例えばこのマクロをエクセルでない(エクセルを開かないで動かす?)で
実行させるのって、〜.vbsというのがあるということなんですが。

【5593】Re:ファイルコピーマクロについて
発言  ひで  - 03/5/21(水) 14:24 -

引用なし
パスワード
   ▼olive さん こんにちは

>ただひとつ、もう一歩!て思うところがありまして・・
>インプットボックスで数値を入力させたところで「キャンセル」ボタンを押した
>場合にキャンセルされました、などのメッセージを出そうと思うのですが、
>N=InputBox・・・
>If N="" Then
> MsgBox "キャンセルされました"
> Exit Sbub
>End If
>ではだめなんですか?InputBoxではキャンセルで(" ")を返すんだと思っている
>のですが・・・?エラーになります。(NはLong型で宣言してます)

#1706
 が参考になるかと思いますがどうでしょう。
    (過去ログも検索してみてね・・)

【5602】Re:ファイルコピーマクロについて
お礼  olive  - 03/5/21(水) 21:31 -

引用なし
パスワード
   ひでさん、アドバイスありがとうございます。
型が違う、とのエラーがでたので、宣言するところで
Variant型にしました。

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