アプリ版:「スタンプのみでお礼する」機能のリリースについて

指定のフォルダに30個のエクセルファイルがあったとします。
そしてそれぞれのエクセルファイルの指定のセルにはそれぞれ文字が入っています。
例:●●▲.xlsのB4には ①らいおん
  ■●●.xlsのB4には③ねこ
※ファイル端子は古い場合(xlsxやxlsmの場合ありうる)

そしてマクロを実行すると、
1つ目のファイル名が①らいおん.xls
2つ目のファイル名が③ねこ.xls
と一気に変えられるようにしたいです。

B4の位置や指定のフォルダの格納場所は都度、
マクロの中で指定できるようにしたいです。

マクロは計算式を貼り付けるぐらいの知識しかないため、
マクロの計算式をご教授いただけると幸いです(T_T)

A 回答 (4件)

甘えて可愛いのは、女性だけです。

甘えられるのは好きではありませんが、
最後に、アドバイスです。
reName = .Sheets(1).Range(trgCell).Value
セルの場合と同様にシート名に変更すれば良いです。

reName = .Sheets("ねこ").Range(trgCell).Value
こう書けば、ねこのシートが対象になりますね、この形はセルアドレスの時と似てますよね
なので、セルの時と同じような感じで変更すれば良いかと思いますよ。。
    • good
    • 0

>A4 と指定したらA4のセルを拾ってそれぞれ一斉にリネームするという感じです。



reName = .Sheets(1).Range("B4").Value のアドレス部分を変数にします。

Dim trgCell As String '変数名は適当に


reName = .Sheets(1).Range(trgCell).Value

あとは、trgCellにどこでどのように値を代入するかです。

例えば、操作している実行ブックの表示シートのA1セルの値なら A1セルに B4 と入力して例と同じに実行出来ますね。

trgCell = ThisWorkbook.ActiveSheet.Range("A1").Value
場所は、Application.ScreenUpdating = False この上辺りでしょうか?

また、InputBoxなどで入力しても良いかもしれません。

trgCell = Application.InputBox(Prompt:="セルアドレスを入力してください", Type:=8)
  If trgCell = "False" Or trgCell = "" Then Exit Sub

B4と入力してOKを押せば、例と同じです。

その他にも、ファイル名で処理を分けるとか、色々と考えられますね。 

いずれにしても、先のコードやこの追記に関してもエラー処理を行っていません。
強いて言えば、問題があってもOn Error Resume Nextで処理を継続している点を考慮してください。
あまり分からないかも知れませんが、想定外の不具合が発生する可能性がありますので注意してくださいね。

そのあたりを考え、エラー処理を加える場合は、On Error Resume Nextをコメントにして処理から外して実行して
デバッグ対応を書き加えましょう。
    • good
    • 0
この回答へのお礼

Qchan1962さま
再度のご回答ありがとうございます;;
無事できました。
こんなすごいことができるとは思いませんでした・・
On Error Resume Nextをコメントにして処理から外して実行するのですね!
承知しました!ありがとうございます(*^^*)

更に甘えても大丈夫ですか?(;_;)
実は指定フォルダ格納しているエクセルファイルにはたまにシートがたくさんあることがありまして、
そのシートの名前は必ずしも一番左にあったりSheet1という名前であったりするわけではなく、
すべてのエクセルシートには必ず共通の名前のシートがあって、そのシートの指定のセルの
名前に変更したい場合があります。
この場合、たとえばねこというシートがあった場合は、
ねこ とシート名を指定したうえで、そのねこのシートにある指定セル(ここはもう解決していただいています)
の名前に変更したいという感じです。

お礼日時:2020/06/15 00:38

「ファイル端子」の「端子」とはだう云ふ意味ですか?

    • good
    • 0
この回答へのお礼

ファイルの拡張子という意味です(*^^*)
端子ではありませんでした・・
ご指摘ありがとうございます;;

お礼日時:2020/06/14 23:14

こんにちは、


突っ込みどころがいくつかありますが、それはそれとして
>xlsxやxlsmの場合ありうる
>.xlsしたい
マクロ有効ブックを.xlsにしたいのでしょうか?ご使用のExcelバージョンは何でしょう?
この辺りは、問題になる可能性がありますが、、強引で良いのかな?

>B4の位置や
シートは何処?

>B4の位置や指定のフォルダの格納場所は都度、マクロの中で指定できるようにしたいです。
>一気に変えられるようにしたいです。
これには矛盾があるように思います。都度とありますが、
インプットボックスやダイアログなどで都度聞かれるのも一気と解釈して良いのでしょうか?
(これについてはうまく理解できていないかも知れませんが)

>マクロの計算式をご教授いただけると幸いです(T_T)
マクロの計算式は、プログラムを指しているのでしょうか?

1回しか実行しないコードかも知れませんが、コードはともかく処理や手順を考える様にしなければ
人にも伝えられないと思いますので、、言葉で良いので、ご自身で処理、手順を考えて見てください。

考えた処理や手順をそのまま検索すれば、参考になるコードは、山の様にあります、後は理解するだけです。
それが出来ないのであれば、ここで処理を書いても同じことになります。
語っても仕方ないので、
私は暇つぶしになり、ご質問者は目的を達成できる、、そう考えればwinWinですね。

そこで、参考になるか分かりませんが、問題ごとはすべて、On Error Resume Nextで飛ばして。。
同じフォルダにある.xls?のファイルを自身のシートインデックス1のB4セルの値でリネーム処理(拡張子.xls)をする
処理を下に示します。

Sub Sample()
Dim FSO As Object, f As Variant
Dim pF As String, reName As String
Dim cnt As Integer
  Set FSO = CreateObject("Scripting.FileSystemObject")
  With Application.FileDialog(msoFileDialogFolderPicker)
   .InitialFileName = CreateObject("WScript.Shell").SpecialFolders("desktop")
   If .Show = True Then
    pF = .SelectedItems(1) & "\"
   End If
  End With
  If pF = "" Then Exit Sub
  On Error Resume Next
  Application.ScreenUpdating = False
  Application.DisplayAlerts = False
  For Each f In FSO.GetFolder(pF).Files
   If LCase(FSO.GetExtensionName(f.Name)) Like "xls*" Then
    With Workbooks.Open(pF & "\" & f.Name)
      reName = .Sheets(1).Range("B4").Value
      .Close SaveChanges:=False
    End With
    If reName <> "" Then
      f.Name = reName & ".xls"
      cnt = cnt + 1
    End If
   End If
  Next f
  Application.DisplayAlerts = True
  Application.ScreenUpdating = True
  If cnt > 0 Then
   MsgBox cnt & " 件 処理しました。", vbExclamation
  Else
   MsgBox " 該当ファイルはありませんでした。", vbExclamation
  End If
  Set FSO = Nothing
End Sub
    • good
    • 0
この回答へのお礼

Qchan1962さま
ご回答ありがとうございます;;
再現できました!私の拙い説明にもかかわらず本当に感謝いたします。
指定のフォルダを選択できるようにしていただいたと思います。その中には.xlsのファイルであったり
古い形式のエクセルファイル拡張子が混在していることがあるのです。そして、リネームする場合には、拡張子は
変えずにそのままリネームできるようにしたいという趣旨でした。また、都度というのはまさに
指定のフォルダ→今回のプログラムを実行すると指定のフォルダが選べる

ということなので希望どおりのプログラムです。また今回はB4のセルに入力された名前にリネームできるように
していただいていたと思うのですが、例えばこれをプログラムを実行するマクロの中でどのセルの名前を変更しますか?
とダイアログがでて、A4 と指定したらA4のセルを拾ってそれぞれ一斉にリネームするという感じです。
もしくは、ダイアログで出なくてもよいので、マクロ実行ファイルの中のどこかのセルに B8と入力しておけば
そのB8のセルを拾って変更するというイメージです。
こんなことは可能なのでしょうか・・?

お礼日時:2020/06/14 23:13

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