これ何て呼びますか Part2

どなたかにご教示頂きたいのですが
まず、やりたいこととして
・別のExcelファイルを開いてその中の指定したシートを別シートに保存する
・セルの値を0クリアする
の2点です、まず別のエクセルファイルを開くところで躓いているのですが
具体的なコードは
Sub ファイルを開く()
' ファイルを開く Macro
' Excelファイルを開きます

Application.Goto Reference:="ファイルを開く"
Sub ExcelFileName()


Dim myOldFile As Variant

Dim Response As Integer

Dim myName As String



Response = MsgBox("Excelファイルを選択してください。", vbOKCancel + vbInformation, "データ移行")



If Response = vbOK Then



'開いたファイルのパスと名前を取得

myOldFile = Application.GetOpenFilename("Excelファイル (*.xls;*.xlsm),*.xls;*.xlsm")

If myOldFile = False Then Exit Sub



Else

Exit Sub

End If



'ファイル名

myName = Mid(myOldFile, InStrRev(myOldFile, "\") + 1)


MsgBox myName


End Sub
このように書いています、しかしこれではExcelファイルは選択できませんでした。
あと列1行1のセルにボタンを作ってそこから起動するようにしたいのですがボタンの作り方がわかりません。
特定の列の数値を0にする、まではまだ考えてないのですがどうすればいいのでしょうか?

質問者からの補足コメント

  • へこむわー

    開いたシートのセルに数字が入力されているのですが
    これを0にするという意味です。
    書き方が悪かったようですね、申し訳ありません。

    No.1の回答に寄せられた補足コメントです。 補足日時:2015/12/14 02:42
  • へこむわー

    https://oshiete.goo.ne.jp/qa/9131023.html

    補足が長くなりすぎたためこちらで改めて質問させて頂きました。
    もしよろしければアドバイスを頂きたいです。
    よろしくお願いいたします。

      補足日時:2015/12/14 14:01

A 回答 (2件)

>しかしこれではExcelファイルは選択できませんでした。


ファイルは選択できると思うのですが、開き方がわからないのでは?
とりあえず
MsgBox myName

Application.Workbooks.Open myName
にしてみてください。
・別のExcelファイルを開いてその中の指定したシートを別シートに保存する
Sheets.Add After:=ActiveSheet
myName = Mid(myOldFile, InStrRev(myOldFile, "\") + 1)
Application.Workbooks.Open myName
Cells.Copy
ThisWorkbook.Activate
ActiveSheet.Cells.Select
ActiveSheet.Paste
Application.CutCopyMode = False
Workbooks(myName).Close
こんな感じでしょうか。

・セルの値を0クリアする
この意味も分からないのですが
コピーしたシートのUsedRange で0を 空白にするのであれば
Dim r As Range
For Each r In ActiveSheet.UsedRange
If r.Value = 0 Then r.Value = ""
Next

を最後に実行してみてください。
この回答への補足あり
    • good
    • 0

こんにちは。



ちょっと、流れを読んでいたのですが、コードは、見よう見まねというところでしょう。

ただ、ご質問の内容の流れを、完全にマクロ上で再現するには、UserForm上ではないと、できないはずです。
Workbookを開くまではよいにしても、その先、マクロを一旦離れて、任意のシート指定をする方法は、ありません。シート名や位置が決まっていれば、そのまま可能ですが、そこらが煮詰まっていないというところでしょうか。

なお、
myOldFile = Application.GetOpenFilename("Excelファイル (*.xls;*.xlsm),*.xls;*.xlsm")
myName = Mid(myOldFile, InStrRev(myOldFile, "\") + 1)

こう繋がるのは、カレントディレクトリにある場合のみですが、わざわざ、このようなことをする必要はありませんね。

>Sub ファイルを開く()
>' ファイルを開く Macro
>' Excelファイルを開きます
>Application.Goto Reference:="ファイルを開く"
>End Sub

まさか、Ver.4 マクロではないでしょう?
Application.Goto は、セル位置に飛ぶ場合です。
Call マクロ名、または、そのまま、マクロ名を呼び出します。(基本的には、標準モジュールで、Private キーワードがついていないマクロの場合に限ります。)

>ボタンの作り方がわかりません。
開発タブの挿入のフォームコントロールの中から、ボタンを選んで、セル上でドラッグすれば、ボタンになりますから、後は、ダイアログが出ていましたから、一旦、閉じてしまって、マクロを書いてから当たらに登録してください。

列の数値を0にするというのは、
数値があれば、それらは全部0にするなら、こうなります。Error トラップも含めてください。

On Error Resume Next
ActiveSheet.Columns(1).SpecialCells(xlCellTypeConstants, xlNumbers).Value = 0
On Error GoTo 0

>その中の指定したシートを別シートに保存する
よく意味が分かりませんが、同じブックの右に、新しいシートとしてコピーするなら、

ActiveSheet.Copy After:=Worksheets(Worksheets.Count)

というところでしょうか。
    • good
    • 0

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


おすすめ情報