人に聞けない痔の悩み、これでスッキリ >>

こんにちは.
MacでのExcel VBAについて質問があります.
同じフォルダー内にある"A2"というファイル名のファイルを開こうとしたのように入力しても,ファイルが見つかりませんというようになります.
何か方法はありませんか?
宜しくお願いします.
Workbooks.Open ThisWorkbook.Path & "¥A2.xlsx"

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

A 回答 (3件)

Macで「¥」を使えないことが原因ではないでしょうか?


「Application.PathSeparator」を使ってみては。
http://darumaexcel.uijin.com/info/pause.html#con …
    • good
    • 0
この回答へのお礼

ありがとうございます.URLを参照すれば成功しました!ありがとうございます!

お礼日時:2017/01/28 22:29

Macは所持していないのですが



Workbooks.Open ThisWorkbook.Path & ":A2.xlsx" ではないでしょうか?

ファイルパスのフォルダの区切り記号が違う
http://darumaexcel.uijin.com/info/pause.html


まずMsgbox ThisWorkbook.Pathでどんな表示になるか確認してみましょう
    • good
    • 0
この回答へのお礼

回答ありがとうございます.上記の方法ではできませんでした.他の方法を探します.

お礼日時:2017/01/28 22:30

私はWindowsユーザーなので試せていませんが、


Macの場合は"\"ではなく、":"でフォルダを区切るという情報がみつかりましたのでお試しください。
    • good
    • 0
この回答へのお礼

回答ありがとうございます.上記の方法ではできませんでした.他の方法を探します.

お礼日時:2017/01/28 22:30

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

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

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

QOS 10.4/ 保存先のパスを指定する方法 (EXCEL)

表題だけだと意味不明だと思いますので。。

エクセル (Office X)でこんなマクロがあります。
「クリックすると、『別名を指定して保存』する」

それが
SaveAs Filename:=" "
なんですが、
" "の部分に保存先のパスを入れるんです。

例えば"Macintosh HD">"ユーザー">"tanaka" の中に"aaa"というフォルダーがあるとします。
そこに保存したい場合、" "内は何にすればいいでしょうか?

"Volumes:Macintosh:users:tanaka:aaa:"でしょうか?
"users:tanaka:aaa:" でしょうか?

Aベストアンサー

Excelのマクロというのをよく分かっていませんが、
"Macintosh HD:Users:tanaka:aaa:"
だと思います。

書類フォルダの中のaaaフォルダであれば、
"Macintosh HD:Users:tanaka:Documents:aaa:"
デスクトップのaaaフォルダであれば、
"Macintosh HD:Users:tanaka:Desktop:aaa:"
となるでしょう。

Q検索後に抽出し並べ替えをおこないたい

こんばんは
VBAについておしえてくださいませ。
表に1日から5日までのメンバーの予定がはいっております。(添付ファイル参照)
日にちごとに水泳だけをメンバーごとに以下のようにならべ替えを行いたいです。
どのようにすればよろしいでしょか。
宜しくおねがいいたします。

Aベストアンサー

いかのマクロを標準モジュールへ登録してください。
----------------------------------------------------
Option Explicit
Public Sub 並べ替え()
Dim dd As Long
Dim lastday As Long
Dim pp As Long
Dim col As Long
Dim row As Long
Dim ix As Long
Const Trg As String = "水泳"
For dd = 1 To 31
col = dd + 1
row = dd + 9
If Cells(1, col).Value = "" Then Exit For
lastday = dd
Cells(row, 1).Value = Cells(1, col).Value
ix = 0
'並べ替え
For pp = 1 To 4
If Cells(pp + 1, col).Value = Trg Then
Cells(row, 2 + 2 * ix).Value = Trg
Cells(row, 3 + 2 * ix).Value = Cells(1 + pp, 1).Value
ix = ix + 1
End If
Next
'残りを空白で埋める
For pp = ix + 1 To 4
Cells(row, 2 + 2 * (pp - 1)).Value = ""
Cells(row, 3 + 2 * (pp - 1)).Value = ""
Next
Next
'残りを空白で埋める
For dd = lastday + 1 To 31
row = dd + 9
Range("A" & row & ":I" & row).Value = ""
Next
End Sub
---------------------------------------------------------

いかのマクロを標準モジュールへ登録してください。
----------------------------------------------------
Option Explicit
Public Sub 並べ替え()
Dim dd As Long
Dim lastday As Long
Dim pp As Long
Dim col As Long
Dim row As Long
Dim ix As Long
Const Trg As String = "水泳"
For dd = 1 To 31
col = dd + 1
row = dd + 9
If Cells(1, col).Value = "" Then Exit For
lastday = dd
Cells(row, 1).Value = Cells(1, col).Value...続きを読む

Qよろしくお願いします。 A店 B店 C店 AH AI AJ J-A 368 450 290 450

よろしくお願いします。
A店 B店 C店 AH AI AJ
J-A 368 450 290 450 270 290
B-A 440 250 320 460 280 320
J-D 650 435 550 650 440 390
店名が記載されてる方のところの列はそのままA.BCの列です。
右と左離れて記載されてます。又量も下にも、横にもまだまだありますが、今は、この表で考えて下さい。右側に記載されてる数字が左側に記載されてるかどうかを調べたいのですが、もし記載されてたら左側の数字に色をつけたいのです。よろしくお願いします。

Aベストアンサー

範囲 A2:C4 を選択したときの[条件付き書式]の数式を下記のように設定すればOK!
=COUNTIF($AH2:$AJ2,A2)

QExcel 日にち毎の集計方法

集計の仕方を教えて下さい。
Excel 縦A列に全従業員名
横列に1~31日の日にちがあり、
それぞれ出勤日に⚫が付いています。
⚫が付いた日にち毎に出勤者をいっきに確認したいです。
関数もしくはピボットテーブルでの集計の方法を教えて下さい。

Aベストアンサー

フィルタを使ってください。添付の図では●のみをフィルタを使って表示しています。
1日にフィルタを設定し1日の出勤者(氏名1,3,7,10)のみを表示しています。

Qエクセルのマクロ。 お世話になります。 原紙という名前のシート1に【印刷】や【開始】のマクロボタンの

エクセルのマクロ。
お世話になります。
原紙という名前のシート1に【印刷】や【開始】のマクロボタンのある見積りデータがあります。

【保存】のマクロ入力で
別シートに保存
ナンバリングして見積りを後から見られるようにしたいです。
ナンバリングはZ1にあるとします。

マクロの記録でシートのコピーをするとボタン名が変わったりうまくいきません。
ナンバリングもできません。

VBAで教えて頂ければ助かります。
言葉足らずな点は補足します。
よろしくお願いします。

Aベストアンサー

ひょっとしてですが、見積もりの件数分だけシートが増えていく構成なのでしょうか?
もし、そうでしたらそちらを見直した方が良いです。
提案
見積もりデータのシートを準備
  A     B    C   D  E  ・・・・
ナンバリング 取引先  品名 数量  単価
・・・・
とデータとなる形で入力していきます。
見積もり書のフォームのシート
Z1にナンバーを入れると、必要なデータが抽出されて
見積書となる。

こちらのマクロ考えた方が良いと思います。
もうひとつ作るとすれば
入力用の見積書のフォーマットを準備してボタンを押すと
見積もりデータのシートに追記されるマクロぐらいでしょうか。

Q関数だけを保護して削除されないようにしたい

お世話になっています。

セルの中に関数が入っています。
他の人が操作する時に間違って関数を削除されないように
設定したいと思っています。

エクセルにそういう機能がないかネットで調べたところ

http://bit.ly/2lRgSMe にヒットしました。

リンク先の通りに操作して、
書式のプルダウンメニューから「セルのロック」を
ONにしましたが削除れてしまいます。

リンク先をよく読むとこの機能はシートを保護しないと機能しないらしいので、
リンク先の説明を参考にプルダウンメニュウ-からシートを保護したことろ
今度は保護していないセルに数値を入力することが出来なくなりました。

確かにセルを保護して関数は削除されなくなりましたが、、、
これでは読み取り専用のファイルと同じで表として使えません。

関数の入ったセルだけを編集や削除出来ないようにして、
他のセルには通常通り数値や文字を入力し、
関数入りの表として使うことが出来るような設定はないのでしょうか?

もしこういう設定が出来るのでしたら、説明の上手な方、
具体的に操作を説明できる方、すいませんが設定方法を教えて下さい。
よろしくお願いします。

※エクセルのバージョンはEXCEL2010です。

お世話になっています。

セルの中に関数が入っています。
他の人が操作する時に間違って関数を削除されないように
設定したいと思っています。

エクセルにそういう機能がないかネットで調べたところ

http://bit.ly/2lRgSMe にヒットしました。

リンク先の通りに操作して、
書式のプルダウンメニューから「セルのロック」を
ONにしましたが削除れてしまいます。

リンク先をよく読むとこの機能はシートを保護しないと機能しないらしいので、
リンク先の説明を参考にプルダウンメニュウ-からシ...続きを読む

Aベストアンサー

1.通常通り、入力などをさせたいセル範囲を選択
2.Ctrl + 1  (セルの書式設定)
3.タブの「保護」
4.「ロック」を外す
5.Alt+ T、P、P

あなたの意図と合っていますでしょうか。

Qアチ こんにちは。 エクセルで勤務時間と深夜時間の管理をしているのですが、不定期の休日のところで勤務

アチ
こんにちは。
エクセルで勤務時間と深夜時間の管理をしているのですが、不定期の休日のところで勤務時間のセルがマイナス時間になります。ならないためにはどう入力すればよいのですか、教えてください。お願いしますか

Aベストアンサー

日付を含めた時間を使って計算するようにすると回避ができる。
例:="2016/1/29 12:00"-”2016/1/28 22:00"

・・・
休日をどのように処理をしているのか質問文からは全く見えませんので、一般的な回答をしてみました。
全体の処理をこのやり方に作り直すことでエラーの原因を把握しやすくなり、訂正も楽になると思います。

Q【VBA】タブ区切り形式で保存し拡張子を変更できない

下記を行いたかったのですが上手く動作しませんでした。
理由がわかるかたがいらっしゃいましたらご教示をお願いします。

# 本来行いたかったことは別の方法で実現したので、質問は後学のためです。


※行いたかったこと
・マクロで、開いているブック(以下xlsmファイル、シートは1個のみ)タブ区切り形式で保存する
・保存したファイル(以下txtファイル)の拡張子がtxtなのでtsv(以下tsvファイル)に変更したい

※問題点
・ThisWorkbook.SaveAs FileFormat:=xlText で保存するとtxtファイルがThisWorkbookとなってしまう
・txtファイルを開いている状態なのでtsvに拡張子変更ができない

※対応策(上手くいかなかった)
・ThisWorkbook.SaveAsで保存後、xlsmファイルを開き、txtファイルを閉じる
・txtファイルのWorkbook_Openイベントで、txtファイルが閉じたことを確認後
 txt→tsvのリネームを行う

※結果(状況)
・saveAsTSV()を実行するとtxtファイル保存はされるが、tsvファイルへのリネームが行われない
 "TXT close"メッセージは表示されている
 既にtsvファイルが存在している場合、削除(上書き)されない

・xlsmファイルとtxtファイルが存在する状態で、xlsmファイルを起動すると
 txt→tsvのリネームは行われる。


実験環境
Win7 32bit / Excel 2010
Win10 64bit / Excel 2016



-------------------------------------------------------
Option Explicit

Public Sub saveAsTSV()
  Dim xlsmPath As String
  Dim txtPath As String
  
  xlsmPath = ThisWorkbook.FullName
  txtPath = Left(xlsmPath, InStrRev(xlsmPath, ".")) & "txt"
  
  ThisWorkbook.SaveAs Filename:=txtPath, FileFormat:=xlText, CreateBackup:=False
MsgBox ThisWorkbook.Name
  
  Workbooks.Open xlsmPath
  ThisWorkbook.Close
  
End Sub


-------------------------------------------------------
Option Explicit

Private Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As LongPtr)
'Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Private Sub Workbook_Open()
  Dim bk As Workbook
  Dim xlsmPath As String
  Dim txtPath As String
  Dim tsvPath As String
  Dim flag As Boolean
  
  xlsmPath = ThisWorkbook.FullName
  txtPath = Left(xlsmPath, InStrRev(xlsmPath, ".")) & "txt"
  tsvPath = Left(xlsmPath, InStrRev(xlsmPath, ".")) & "tsv"

  ' TXTが開いていたら閉じる
  For Each bk In Workbooks
    If bk.FullName = txtPath Then
MsgBox "TXT close"
      bk.Close SaveChanges:=True
    End If
  Next
  ' TXTが閉じるまで待つ
  flag = True
  Do While flag
    flag = False
    For Each bk In Workbooks
      If bk.FullName = txtPath Then flag = True
    Next
    Sleep 100
    DoEvents
  Loop
  Sleep 100
  
  With CreateObject("Scripting.FileSystemObject")
    ' TXTがあればTSVにリネーム
    If .FileExists(txtPath) Then
      ' TSVがあれば削除
      If .FileExists(tsvPath) Then
MsgBox "Delete"
        .deleteFile tsvPath
      End If
MsgBox "Rename"
      .moveFile txtPath, tsvPath
    End If
  End With

End Sub

下記を行いたかったのですが上手く動作しませんでした。
理由がわかるかたがいらっしゃいましたらご教示をお願いします。

# 本来行いたかったことは別の方法で実現したので、質問は後学のためです。


※行いたかったこと
・マクロで、開いているブック(以下xlsmファイル、シートは1個のみ)タブ区切り形式で保存する
・保存したファイル(以下txtファイル)の拡張子がtxtなのでtsv(以下tsvファイル)に変更したい

※問題点
・ThisWorkbook.SaveAs FileFormat:=xlText で保存するとtxtファイルがThis...続きを読む

Aベストアンサー

予想ですが。

ThisWorkbook.Close の実行と、実際にファイルが閉じられるタイミングが違うのではないでしょうか。


マクロ実行開始

元ファイルのマクロモジュール読み込み

saveAsTSV 実行

新ファイルをオープン
saveAsTSV実行中なので、Workbook_Openはここでは実行されない

ThisWorkbook.Close する
「元ファイルのマクロモジュール」が使用中のため、完全に閉じるのはこの段階ではない

saveAsTSVのEnd Subへ到達

新ファイルのWorkbook_Openを実行
元ファイルはマクロモジュールが使用中のため、ファイル名を変更できない

全マクロ終了

読み込んでいたマクロモジュールを解放

元ファイルが全て未使用になったので、ここでファイルが閉じられる。

と考えると、説明が付きます。

QExcelで2つ1組の数値の内、1つの数値を別の数値とセットにする方法

①のシートのA列に型番、B列にシリアルが入っており、②のシートのA列に型番のみが入っています。
①と②の型番は完全一致しているものもあれば、型番の末尾が途切れてしまい完全一致しないものもありますし、数文字しか一致しないものもあります。
②の型番の隣に①のシリアルを入れたいのですが、何かうまく関数を使えば簡単にできるでしょうか?

型番をそれぞれ昇順にして貼り付けようとしたのですが、①と②の型番が完全一致ではないため、同じ並びにならず、そのまま貼り付けることができません。
何かいい方法があれば教えて下さい。
宜しくお願い致します。

例】
①シート
A列 B列
ABC 1234
PQR 2345
STU 5678
XYZ 1209
②シート
A列 B列
TU
XYS
PQR
BC

分かりづらかったらすみません。。。
宜しくお願い致します。

Aベストアンサー

部分的に重複しているような型番もあるのでしょうか?
ABCとABDという型番があり、②に欠けたABという型番があった場合、ABCかABDか判断する方法が無いと思います。
また、②のXYSというのはXYZが間違えて?入力されているような場合を想定していると思われますが、それもどの程度の一致で判断するのでしょう?
②にXYSとあって、①にXYZとEYSが存在した場合、どちらと判定すればよいか分からないと思います。

何らかの判断基準を決めたとして、
まずVLOOKUPで完全一致を探し、一致したもののシリアルを取得します。
フィルタを使い、エラー表示のものだけ表示し、式の内容を変更します。

判断基準の優先度が高いものから順に試します。
場合によっては①のA列とB列の間に列を挿入し、判定用の補助セルとして使います。
例えば、前から5文字一致したら同一とみなす。とした場合、
VLOOKUPとLEFTにより、左から5文字抽出したものが一致した場合にシリアルを取得します。
先ほど同様にフィルタでエラーのものだけ表示させ、また別の条件の式を入力します。

例えば今度は右から5文字一致したら、とかでしょうか。
あるいは②の文字が欠けているとして、②の全てを含むセル。という条件もあるでしょう。
この場合SUMPRODUCTやFIND、INDIRECT、ROW等を使い、一致するものがある列の行番号を取得する必要があると思われます。

データの数にもよりますが、残り少なくなれば判定式を考えるより目で見た方が早いかもしれません。

自分が思いついたのはこの程度です。
人間が条件を指定してあげないと機械も判別できないですよ。
もっと上手いやり方もあるかもしれないので、他の回答者に期待。

部分的に重複しているような型番もあるのでしょうか?
ABCとABDという型番があり、②に欠けたABという型番があった場合、ABCかABDか判断する方法が無いと思います。
また、②のXYSというのはXYZが間違えて?入力されているような場合を想定していると思われますが、それもどの程度の一致で判断するのでしょう?
②にXYSとあって、①にXYZとEYSが存在した場合、どちらと判定すればよいか分からないと思います。

何らかの判断基準を決めたとして、
まずVLOOKUPで完全一致を探し、一致したもののシリアルを取得します。
...続きを読む

QExcel2013のOFFSET関数でのエラーの原因を教えてください。

Excel2013のOFFSET関数を使った時のエラーの原因を教えてください。
(他のやり方もあるのでしょうが、今回のエラーの原因が知りたいです)

A1に=Z1と入力して右や下にオートフィルすればZ1周辺の値をA1周辺に表示できます。
同じことを=OFFSET($Z$1,ROW(A1)-1,COLUMN(A1)-1)で表したいときに
「$Z$1」というセル番地を計算から得ようとするとエラーになってしまい困っています。

例えばA1:Z1の中からE2に入力した文字列と同じ値を持つセルの番地を得たいときは、=ADDRESS(1,MATCH(E2,A1:Z1,0),1)でOKですね?
それなのにこの数式をそのままOFFSET関数の"基準"の部分に持ってくるとエラーになってしまいます。
=OFFSET(ADDRESS(1,MATCH($E$2,$A$1:$Z$1,0),4),ROW(A1)-1,COLUMN(A1)-1)
ADDRESSで得られるセル番地は文字列として扱えないんでしょうか?

(ちなみに=OFFSET($Z$1,ROW(A1)-1,COLUMN(A1)-1)と直接打てば正しい結果が得られます。)

Excel2013のOFFSET関数を使った時のエラーの原因を教えてください。
(他のやり方もあるのでしょうが、今回のエラーの原因が知りたいです)

A1に=Z1と入力して右や下にオートフィルすればZ1周辺の値をA1周辺に表示できます。
同じことを=OFFSET($Z$1,ROW(A1)-1,COLUMN(A1)-1)で表したいときに
「$Z$1」というセル番地を計算から得ようとするとエラーになってしまい困っています。

例えばA1:Z1の中からE2に入力した文字列と同じ値を持つセルの番地を得たいときは、=ADDRESS(1,MATCH(E2,A1:Z1,0),1)でOKで...続きを読む

Aベストアンサー

対策はNo.1様のとおりですね。

> 今回のエラーの原因が知りたいです

ADDRESS関数が返すのはアドレスを示す「文字列」にすぎません。そしてOFFSET関数で必要なのは、参照(セルそのもの)です。なのでデータの種類が違うのでエラーになります。
そこで「アドレス文字列」を「参照」に変換することが必要になりますが、それを行うのがINDIRECT関数になります。


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

人気Q&Aランキング