トップページtech
1001コメント341KB

Excel VBA 質問スレ Part37 [転載禁止]©5ch.io

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2015/01/10(土) 07:06:30.56ID:2VZ4g5kC
ExcelのVBAに関する質問スレです

                   ___
       ___      /____ヽ      ____
      /____\    | |´・ω・`| |    /___ヽ
      .l |´・ω・`|  ニX二 . ̄ ̄ ̄  二X二  |´・ω・`| l 俺たちに任せろ
      !、 ̄ ̄ ̄  ヽ   |       |    /    ̄ ̄ ̄/
       ヽ_/ヽ、  ヽ__)  \__/\_/.   /_/  ノヽ_/
             ̄                ̄ ̄

このスレはコード書き込みOKです。
作成依頼もOKですが、作成依頼限定ではありません。

コードが嫌な人は別スレ建ててください。

※前スレ
Excel VBA 質問スレ Part36 [転載禁止]©2ch.net・
http://peace.2ch.net/test/read.cgi/tech/1419718732/

※頭のレスの方でキチガイが束縛テンプレを貼る詐欺行為が前スレまで散見されましたので、十分にご注意ください。
0652デフォルトの名無しさん2015/07/22(水) 19:25:17.64ID:vbbcVbHR
>>651
機種によるけど、Then Let の場合、ThenかLetを省略できるので、Thenを省略してより短いLetを残すことがった
あとはLet省略しても、自動的に補完される機種もあったな
0653デフォルトの名無しさん2015/07/22(水) 20:53:03.95ID:h8BR7O6Q
昔すぎるのでは?
0654デフォルトの名無しさん2015/07/22(水) 21:51:43.71ID:JCiitdGg
>>653
今時 Let とか言い出したアホに言ってくれよ
0655デフォルトの名無しさん2015/07/22(水) 22:14:32.64ID:f2fD5abO
Then Gotoの場合、ThenまたはGotoを省略できたのと同じか
0656デフォルトの名無しさん2015/07/22(水) 23:16:34.02ID:EIwMW7nu
文字列をカットする関数で、start,endを位置で指定する関数ってないんだっけ?
MID(文字列,開始位置,文字数)
じゃなくて、
関数(文字列,開始位置,終了位置)
で指定したいです
0657デフォルトの名無しさん2015/07/23(木) 00:01:42.48ID:a8nLYx9Z
function 関数(文字列,開始位置,終了位置)
関数 = mid(文字列,開始位置, 終了位置 - 開始位置)
end function
0658デフォルトの名無しさん2015/07/23(木) 00:11:50.48ID:FtGSRY1f
>>675
ありがとう
天才だな
0659デフォルトの名無しさん2015/07/23(木) 00:19:40.71ID:FtGSRY1f
>>657
ありがとう
天才だな
0660デフォルトの名無しさん2015/07/23(木) 00:30:11.92ID:fIFeUYpQ
>>654
もともとはSetとの対比でLetって話だったはずだが
0661デフォルトの名無しさん2015/07/23(木) 05:50:04.22ID:OfB5opuk
>>660
Let の省略 って書かんとわからんか
0662デフォルトの名無しさん2015/07/23(木) 05:57:57.83ID:CPvEDQbc
>>656-659
>>657 だと一文字切れると思うよ
正しくは

function 関数(文字列,開始位置,終了位置)
関数 = mid(文字列,開始位置, 終了位置 - 開始位置 + 1)
end function

>>661
それがそもそもsetとの対比の話題で出てきたんでしょ?
0663デフォルトの名無しさん2015/07/23(木) 06:13:33.37ID:OfB5opuk
>>662
省略とか言い出したのは >>647
そもそも Let の話してるのに

> ところでお前ら、Letって命令あるのちゃんと知ってるか?

とか言い出したり、ちょっとアレな人なんだろうと思う
0664デフォルトの名無しさん2015/07/23(木) 06:48:31.93ID:H5D81+vI
>>662
「終了位置」の定義によるだろう。
普通は、長さ = end - begin となるようにするから>>657でいいと思うが。
0665デフォルトの名無しさん2015/07/23(木) 07:14:32.88ID:CPvEDQbc
>>664
>定義による
まさにその通りなんだけど、

たとえば、文字列 "あいうえお" から "うえ" を取り出したいときには
Midなら Mid("あいうえお", 3, 2)
となります

これの開始位置とはすなわち3文字目の "う" であり
終了位置は4文字目の "え" なわけですよ

そうするとこれを>>657に適用するなら
関数 = Mid("あいうえお", 3, (4 - 3))
ではなく
関数 = Mid("あいうえお", 3, (4 - 3) + 1)
にしとかないとおかしいんじゃないの?

というのが>>662の主張な訳です
こっちのほうが普通だと思いますね
0666デフォルトの名無しさん2015/07/23(木) 07:20:09.47ID:Vrk4ENFd
>>664
どんな普通だよ w
'あいうえお' の2文字目から4文字目って言われたら大抵の人は 'いうえ' って思うんじゃね?
0667デフォルトの名無しさん2015/07/23(木) 07:21:49.64ID:Vrk4ENFd
>>666
リロードしとらんかった...
例えが同じすぎて笑たわ
0668デフォルトの名無しさん2015/07/23(木) 07:22:43.57ID:Z5SWxUfX
その場合>>657でやるなら
関数("あいうえお", 3, 5)
とするわけだが、配列の長さは UBound - LBound + 1 だったりするから何が「普通」かは一概に言えない。
0669デフォルトの名無しさん2015/07/23(木) 07:53:15.29ID:h4tQPyFC
配列ってここで何か関係あるの?
0670デフォルトの名無しさん2015/07/23(木) 07:57:28.09ID:Z5SWxUfX
UBound +1を指定するところ。
つまり終了位置のひとつ先を引数に設定するのは「普通」のうちに含まれるという主張。
0671デフォルトの名無しさん2015/07/23(木) 08:13:20.35ID:h4tQPyFC
よく分かんないけどそれってOption Base 1指定してもそうなの?
0672デフォルトの名無しさん2015/07/23(木) 08:20:43.91ID:Vrk4ENFd
>>670
むしろその +1 って >>662 の +1 と同じだし

>>671
下限は LBound で取れるので Option で指定しても成り立つ
0673デフォルトの名無しさん2015/07/23(木) 09:36:32.54ID:Z5SWxUfX
"あいうえお"から"うえ"部分を取りたいとき、
>>657 方式だと
関数("あいうえお", 3, 5) と指定する
>>662方式だと
関数("あいうえお", 3, 4) と指定する

+1するってのは使う側が引数に+1するって意味だよ。
0674デフォルトの名無しさん2015/07/23(木) 09:41:39.58ID:P0N6qRSq
>>673
こういう場合に+1する・しないで俺は昔からよく混乱する事があったんだが、最近では何も考えずに無の境地でプログラミングすると、一発で上手く行くようになったよ。
0675デフォルトの名無しさん2015/07/23(木) 11:46:51.39ID:SI8SSCXa
>>673
誰がどう見ても>>662の勝ちだな
0676デフォルトの名無しさん2015/07/23(木) 11:54:13.42ID:Z5SWxUfX
そうかねえ?
俺は、[3, 5), [5, 9), [9, 11) みたいに漏れ重複なく区間を並べられる書き方が好み。
0677デフォルトの名無しさん2015/07/23(木) 11:56:02.55ID:dbj+2vsW
>>674
InStrで「う」と「え」をサーチしたあとに取り出したいとかあるから
関数("あいうえお", 3, 4)
の方が使い勝手がいいと思う

それから「あいうえお」からこの関数をあえて使って「えお」を取り出すときに
関数("あいうえお", 4, 6) だとちょっと気持ち悪いというのもある

個人的な意見だけど
0678デフォルトの名無しさん2015/07/23(木) 12:57:29.05ID:Vrk4ENFd
>>676
書き方は色々あっていいけど、終了位置って普通最後の文字を指すでしょ
0679デフォルトの名無しさん2015/07/23(木) 15:55:49.36ID:fIFeUYpQ
>>663
Set有りと無しではとか言ってる人に、Letって知ってるかって言うのはおかしくないだろ
そこはSetとLetでって書くべきなんだから
0680デフォルトの名無しさん2015/07/23(木) 16:12:59.04ID:mmfWdiQl
終了位置じゃなくて長さ・個数にすれば迷う余地なし
0681デフォルトの名無しさん2015/07/23(木) 16:53:53.03ID:Vrk4ENFd
>>679
スレを辿ることもできないのかよ...
>>636 からの話だぞ
0682デフォルトの名無しさん2015/07/23(木) 17:01:14.71ID:Vrk4ENFd
>>680
(出川口調で)お前はバカか w ⇒ >>656
0683デフォルトの名無しさん2015/07/23(木) 17:44:01.97ID:fIFeUYpQ
>>681
その流れがあるからこそ、SetのあるなしじゃなくてSetとLetだろって話なんだが
まあ話が通じないならもういいや
0684デフォルトの名無しさん2015/07/23(木) 19:13:36.15ID:Z5SWxUfX
(終了位置、長さ)

(長さ、終了位置)
のどっちだったか思い出せなくて悩むはめになる。
0685デフォルトの名無しさん2015/07/23(木) 19:23:54.97ID:Vrk4ENFd
>>683
> SetとLetだろって話なんだが

Set と Let の話してる奴等に

>> ところでお前ら、Letって命令あるのちゃんと知ってるか?

とか言い出したアホがいるって話なんだけど...
0686デフォルトの名無しさん2015/07/23(木) 19:24:52.80ID:jdzUEZ4l
そしたらコメントで…なんて書くと、またコメントがどうたらこうたらで荒れるんだな w
0687デフォルトの名無しさん2015/07/23(木) 19:25:27.87ID:jdzUEZ4l
>>686>>684に対してね
0688デフォルトの名無しさん2015/07/23(木) 21:34:40.50ID:fIFeUYpQ
>>685
Setのあるなしじゃなくて って所を外してるのは、わざとですか?
そこが重要だと理解できてないのですか?
0689デフォルトの名無しさん2015/07/23(木) 23:17:13.99ID:OfB5opuk
>>688
わざとです
論点はあくまでも >>636 ですから
06906362015/07/23(木) 23:55:08.79ID:h4tQPyFC
いやあテレるなぁ
0691デフォルトの名無しさん2015/07/26(日) 02:05:49.12ID:PMtslnm/
コンボボックスの選択完了された値ではなくて
選択中の値・・・ドロップダウンリストが表示された状態で
マウスカーソルがあわさっている値を取得、なんてできますか?
0692デフォルトの名無しさん2015/07/26(日) 02:31:29.01ID:2OSSYxBC
基本的にWindowsのコントロールはサブクラス化すれば何でもできると思っていいよ
0693デフォルトの名無しさん2015/07/26(日) 11:51:18.54ID:PMtslnm/
やはり難しいですよね
リストボックスにしてみます
0694デフォルトの名無しさん2015/07/29(水) 22:52:06.65ID:P4eNlM/m
workbook.sheets(1).copyで新しく作られたbookをactiveworkbookを使わずに取得する方法はありますか?
0695デフォルトの名無しさん2015/07/29(水) 22:54:37.84ID:c3o2n8R7
activeworkbookを使いたくない理由を聞きたいわ。
0696デフォルトの名無しさん2015/07/29(水) 23:36:18.80ID:P4eNlM/m
>>695
何かのタイミングでactiveが変わってしまったら危ないんじゃないかと思ったんですが、そういう事は起こり得ないんですか?
0697デフォルトの名無しさん2015/07/29(水) 23:50:54.16ID:c3o2n8R7
>>696
"Book1 - copy.xlsx"
みたいになると思うので、その名前を使えば良いんじゃないの?
0698デフォルトの名無しさん2015/07/29(水) 23:59:24.34ID:HfzTZxWN
自分で新規ブックをつくってそこにコピーすれば良いだけじゃ
0699デフォルトの名無しさん2015/07/29(水) 23:59:46.07ID:hQM1TMMz
その名前が既にあったらどうするんだ
0700デフォルトの名無しさん2015/07/30(木) 00:00:27.52ID:ds/Apgk5
>>697
名前もその時の状況で変わるので使いづらいです

自分が書いたコードではworkbookオブジェクトを新しく作ってからそこにシートコピーしてるのでactiveworkbookはつかってないんですが、
workbook.sheets(1).copyからもactiveworkbookを使わずオブジェクトを取得できたら楽かなぁと思って質問した次第です
0701デフォルトの名無しさん2015/07/30(木) 00:15:11.00ID:AfvBuYEQ
>>699
事前にチェックすれば良いだけだろハゲ
0702デフォルトの名無しさん2015/07/30(木) 01:58:48.20ID:iv9Zs1qn
Sub こんなんどないや()
Worksheets(1).Copy
Set mybook = Workbooks(Workbooks.Count)
mybook.Sheets(1).Range("A1") = "ABC"
End Sub
0703デフォルトの名無しさん2015/07/30(木) 04:18:29.77ID:3TLsFD+R
Sub NewSheet(Name As String, ByVal cnt As Long)
Dim WS As Worksheet, f As Boolean
Dim NameCnt As String

If cnt Then NameCnt = Name & cnt Else NameCnt = Name

For Each WS In ThisWorkbook.Worksheets
If WS.Name = NameCnt Then f = True: Exit For
Next

If f Then
Call NewSheet(Name, cnt + 1)
Else
Set WS = ThisWorkbook.Worksheets.Add
WS.Name = NameCnt
End If
End Sub
07046942015/07/30(木) 22:02:11.70ID:ds/Apgk5
やっぱりひと手間かけないと難しいですよね
ありがとうございました
0705デフォルトの名無しさん2015/07/31(金) 03:12:44.99ID:aPbYdwRE
>>699
馬鹿なのお前?
0706デフォルトの名無しさん2015/07/31(金) 23:33:53.17ID:q+UwAnSR
なんかお題をちょうだい
0707デフォルトの名無しさん2015/07/31(金) 23:40:31.13ID:pDlCqfLx
テトリスつくって
0708デフォルトの名無しさん2015/07/31(金) 23:44:01.31ID:q+UwAnSR
32LINE2048bytesが制限だからちょっとテトリスはゴメンちゃい
0709デフォルトの名無しさん2015/08/02(日) 08:29:07.26ID:lFlP6vKj
カンマがたくさん入力されたEXCELファイルをcsvファイルにしたい
ところが普通に名前をつけて保存だと"を付いてくれないっぽい

"aaa,bbb","cccc","d","eee","ff"
こういうcsvファイル作りたいんだけど、
VBAからテキストに書くしか方法ない?

元のEXCELファイルでは
カンマが入力されてる位置も数も法則性はありません
0710デフォルトの名無しさん2015/08/02(日) 09:24:03.34ID:js+6DYN9
>>709
それがExcelの仕様
諦めてVBAを書くか、""なしで書き出したテキストファイルを
PerlやRuby等の簡易な言語で加工するか
0711デフォルトの名無しさん2015/08/02(日) 10:54:43.64ID:pHbT44ug
大体他言語の話を持ち出すやつは糖質
特にC++はアスペ
0712デフォルトの名無しさん2015/08/02(日) 11:55:18.99ID:zAkA6wkz
>>711←これが病気の人の執着力です
0713デフォルトの名無しさん2015/08/02(日) 12:23:27.67ID:lFlP6vKj
仕様でしたか
行数多いので処理時間が少し心配ですが、
VBAでやってみます

他言語はvbsで保存後に「,」を「","」に置き換え
加工できるかなとは少し考えてました。
でも置き換え対象外の「,」もあるわけで、
保存後だと判定が難しそう
0714デフォルトの名無しさん2015/08/02(日) 13:06:35.44ID:ZRhH79SV
>>709
試した範囲では、少なくともセル中にカンマを含む場合はちゃんと""で囲んでくれるようだが
まあ、CSVはいろいろ細かいとこが違うから気に入らないなら自分で書き出すのが確実だけど
0715デフォルトの名無しさん2015/08/02(日) 14:52:37.26ID:egshDkuk
リンクされたセルの値が変化した際に実行する処理をWorksheet_Changeに記述しております。
この処理中にリンクされたセルの値が変化した場合、
実行中のWorksheet_Changeは中断され、新たにWorksheet_Changeが開始されるのでしょうか?
それとも、実行中のWorksheet_Changeは引き続き実行され、同時並行にWorksheet_Changeが開始されるのでしょうか?

また、上記のどちらであるかを確認する方法があるようでしたら教えていただきたいのです。
よろしくお願いします。
0716デフォルトの名無しさん2015/08/02(日) 15:09:53.80ID:QrDJWkft
>>715
処理の中に対象セルの値を変化させるコードがある場合、そこから新たに実行される。

Private Sub Worksheet_Change(ByVal Target As Range)
Dim i

Debug.Print "preexe"

Target = i

Debug.Print "Postexe"
End Sub

とかで実行してみてイミディエイトウィンドウを確認すると分かりやすい。
0717デフォルトの名無しさん2015/08/02(日) 15:18:10.64ID:9vFz/e2c
無限ループって怖くね?
0718デフォルトの名無しさん2015/08/02(日) 16:32:16.48ID:dkS/+hk9
>>715
A列 金種
B列 枚数
C列 金額
でB、Cの何れか片方に入力されたらもう片方を再計算するようにしたことならあるけど…
07197152015/08/02(日) 17:32:28.59ID:egshDkuk
あー間違えたー
>>715のWorksheet_ChangeはWorksheet_Calculateに読み替えてください。
↓が正しいです。すみません。
"リンクされたセルの値が変化した際に実行する処理をWorksheet_Calculateに記述しております。"

>>716
>そこから新たに実行される
実行中のWorksheet_Changeは中断され新たにWorksheet_Changeが実行されるということでしょうか?
提示してもらったコードを参考にWorksheet_Calculateでの動作を確認してみます。

>>717
Worksheet_Calculateが実行中にリンクされたセルの値が変化することもあれば、変化しないこともありますので
必ずしも無限ループとはなりません。
>>716は無限ですけど。
0720デフォルトの名無しさん2015/08/02(日) 18:39:22.01ID:MF9TQU9s
>>709
そういうのがわずらわしいからTab文字でセパレートするんやで
つーか全レコード舐めて使ってない文字なら何でもいいが
0721デフォルトの名無しさん2015/08/03(月) 10:07:35.51ID:IvRPgtVs
>>709
アドイン探したらあったよ?
Excel CSV I/O 
使ってみたら。
0722デフォルトの名無しさん2015/08/03(月) 15:40:21.92ID:JhhThk5t
2バイト文字の空白エリアからテキトウに選べばええ
0723デフォルトの名無しさん2015/08/04(火) 18:12:48.60ID:Xu3GeQZL
OWCのグラフについてですが、データがEmptyの箇所を非表示にするにはどうすればいいでしょうか?
0724デフォルトの名無しさん2015/08/04(火) 19:13:09.63ID:qaA+gaVg
PowerShell なら、import-csv, export-csv,
-encoding で、UTF-8, Shift-JIS のエンコードも指定できる

Excelのファイル形式では、
6 CSV
22 Mac CSV
23 Windows CSV
24 MSDOS CSV

"a,b","a b"
こういうように、文字列の中に、
カンマや空白が入っていると、
ややこしいので、タブ区切り(TSV)を使う
0725デフォルトの名無しさん2015/08/05(水) 00:47:49.40ID:Xk+R3C8+
特定のブックだけでしか使わないので、そのためにアドインってのはちょっと嫌かな
tsvってなんでExcelに関連付けされてないんだろう
名前をつけて保存でも出てこないし

拡張子協会?みたいのがあって、そこには認められて無くて
タブ区切りだからtsvって一部の人が呼んでるだけなのだろうか
なんて想像してしまう
0726デフォルトの名無しさん2015/08/05(水) 04:31:59.24ID:yfcMdSNW
>>725
Excelでのタブ区切りはテキスト形式指定で保存できる
関連付けは.txtなのでメモ帳になってるのが一般的だな
開くのはEXCELでちゃんと開ける

そもそもcsvはComma-Separated Valuesの略だとされてるから
タブ区切りがcsvじゃおかしいだろうって言う話があってtsvと呼んだりするけど
それ以外の区切り形式も全部ひっくるめてcsvと呼ぶこともある
いちおう今はRFCとかもあるけど、それ以前から存在するし実はかなりカオスな形式
0727デフォルトの名無しさん2015/08/06(木) 21:55:53.33ID:i7HDVQtV
ExcelからVBAでOutlooikを操作し
CreateObject("Outlook.Application").CreateItem(0)
でメールの下書きをいくつかたくさん作ります。

そのあとつくった全部に対して同じ処理をしたいのですが
このCreateItem(0)で作ったメールの下書きのコレクションを取得する方法ってどうやればよいでしょうか?
0728デフォルトの名無しさん2015/08/06(木) 22:24:14.34ID:JI2t4Gst
好きにやればいいよ
0729デフォルトの名無しさん2015/08/06(木) 23:00:42.60ID:hJ1X31cM
>>727
outlook研究所に行けよ
0730デフォルトの名無しさん2015/08/06(木) 23:53:13.21ID:3nTeNGfy
自分で作ってるんだから自分でコレクションに入れていけば良いんじゃね
0731デフォルトの名無しさん2015/08/11(火) 21:35:11.54ID:gtl50mbf
あるセルに
AAA BBB AAA CCC
と表示されているのを
AAA BBB CCC
と、つまり重複文字列を
削除するVBAのコードを何卒
お願いしますm(_ _)m
0732デフォルトの名無しさん2015/08/11(火) 22:49:00.10ID:my6QzTuQ
メニューに重複削除あるだろ
0733デフォルトの名無しさん2015/08/11(火) 23:00:31.84ID:gtl50mbf
>>732
一つにセル内の話です。
例えばA1内に
あああ あああ 200 200
と文字列がある場合に
マクロ実行で
あああ 200
のように。
(かなり困ってますので
お助けを…(_ _))
0734デフォルトの名無しさん2015/08/11(火) 23:02:52.20ID:Rnp54Swm
あるセルって単一セル内?4つのセル?
0735デフォルトの名無しさん2015/08/11(火) 23:14:47.60ID:Rnp54Swm
区切りにスペースは必ず入ってるのかな
0736デフォルトの名無しさん2015/08/11(火) 23:24:55.02ID:3YchA3jD
そんな馬鹿げた要件ないだろ
0737デフォルトの名無しさん2015/08/11(火) 23:43:59.37ID:gtl50mbf
>>734
単一セル内

>>735
スペースは入っています。
元のプログラムでは
文字列型の変数に
str = str & " " & Cell(i, j).Value
のようにして格納いています。
Dim i
Dim j
Dim str As String

For i = 1 To 100
str = str & " " & Cells(i, j).Value
Next i

Worksheets("紙").Cells(1, 1) = str

の様にしましたが結果が上記のようになって
しまいます。つまりstrの中身の重複を
削除する方法です(_ _)
0738デフォルトの名無しさん2015/08/12(水) 00:05:07.74ID:AxCPtTKK
>>731

Sub こんなんどないや()

Set stock = New Collection
barabara = Split(ActiveCell.Value, " ")
On Error Resume Next

For Each OnePiece In barabara
stock.Add OnePiece, OnePiece
Next
On Error GoTo 0
For Each OnePiece In stock
kekka = kekka & " " & OnePiece
Next

ActiveCell.Value = Trim(kekka)

End Sub
0739デフォルトの名無しさん2015/08/12(水) 00:26:19.28ID:g9g1aoHI
>>738
ありがとう御座います。
明日、会社で試してみます。

なんか出来そうな予感は
して来ました(笑)
(夜分遅くに本当に感謝です、他にも
ありましたら何方かなるべくシンプルな
やつでお願いします(^ ^;))
0740デフォルトの名無しさん2015/08/12(水) 01:06:27.62ID:svAFeBJn
>>738
エラー無視させるかキーが当たったら登録させないかは好みで分かれるところだな
0741デフォルトの名無しさん2015/08/12(水) 09:21:11.40ID:ybFGXm8Q
>>740
エラートラップとかはできる限り使いたくないから
> キーが当たったら登録させない
派だな
0742デフォルトの名無しさん2015/08/12(水) 12:37:40.94ID:bqbcCRVa
vba活用してスマホとEXCEL連携して何かできないかな
カメラで撮ったらシートに画像がすぐに貼り付けられるとか
バーコード呼んだらセルに入力されるとか
0743デフォルトの名無しさん2015/08/12(水) 13:40:00.14ID:CjCTxmpZ
dictionary使えばいいでしょ

まあ元のソースが別のセルに入ってるのをわざわざ連結してから処理してる意味がわからないけど
0744デフォルトの名無しさん2015/08/12(水) 13:42:43.23ID:Qp9NewvK
>>742
googleスプレッドシートでやるといいよ
0745デフォルトの名無しさん2015/08/12(水) 17:15:44.92ID:e6JBBjJ+
シートに図挿入したときのことなんですが、
挿入 ― 図 ― (d:\gazo\a000.jpg) ― ファイルにリンクで
貼り付けた画像があるとして、この画像のフルパス(d:\gazo・・・.jpg)を
知ることはできるでしょうか。Excel2007では,代替えテキストに
フルパスが入っていますが、Excel2010では、何も入りません。
(Excel側で、設定とかある?)、どこかに、情報は持っているはずと
思うのですが、VBAで知る方法、わかるかた教えてください。
代替えテキストは、下記でわかるようなのですが。
pic.ShapeRange.AlternativeText
0746デフォルトの名無しさん2015/08/12(水) 23:05:01.82ID:G8qcToBK
そこを方向転換してマクロで図を挿入するようにすればバージョンに依存せずいつでもパスを得られると思わないか
思わないな
07477452015/08/12(水) 23:40:12.65ID:e6JBBjJ+
>>746
じつは、マクロで図を挿入するのを作っていて、「Excel2010でPictures.Insertすると
リンク貼り付けになる」ということなので、いろいろ調べたら「代替テキストに画像のフルパスが
あるなら、挿入にできる」っていうのを見つけた。で、2007だと代替テキストにフルパスが
入ってるけど、2010は、なし。じゃ、ということで2010で代替テキストにフルパスを書き込む
ようにした。で、リンク貼り付け→挿入にできるようになったんだ。これ、>>745カキコしてから
ようやっとできた。だけど、んにゃ、どっかにフルパス情報当然あるはず、と思うんだけど。
ちなみに「AddPicture」は、どうもしっくりこなくて。
0748デフォルトの名無しさん2015/08/13(木) 01:00:44.65ID:CPI6SZk7
>>747
「代替テキストに画像のフルパスがあるなら、挿入にできる」って
なにそれリンクプリーズ
0749デフォルトの名無しさん2015/08/13(木) 01:24:42.76ID:UOPmO2ID
結局何が目的でどれがそのための手段なのかわからん
0750デフォルトの名無しさん2015/08/13(木) 09:28:42.30ID:jLoATrSc
>>748
これです。
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1284060567

要は、画像リンクで貼り付けられてる、画像のフルパスがわかれば、リンク貼り付け→挿入にできる。
Excel2007は、代替テキストに入ってるから、もしリンク貼り付けでも対処できる。2010は、手動貼付けや
Pictures.Insertでは、代替テキストにはフルパスは入らない。マクロで入るようには、もちろんできる。
じゃ、すでに手動なりでリンク貼り付けになってる(フルパス情報なし)のを、挿入にしたいから
図のフルパスを知りたい、ってことなんだわ。ネットで、いろいろググってるんだけど、見つからなくて。
0751デフォルトの名無しさん2015/08/13(木) 10:30:47.40ID:XEpKKFYz
図をコピーして形式を選択して貼り付けするとリンク切れるみたいだけどそれでどうにか
■ このスレッドは過去ログ倉庫に格納されています