Excel VBA 質問スレ Part37 [転載禁止]©5ch.io
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2015/01/10(土) 07:06:30.56ID:2VZ4g5kC___
___ /____ヽ ____
/____\ | |´・ω・`| | /___ヽ
.l |´・ω・`| ニX二 . ̄ ̄ ̄ 二X二 |´・ω・`| l 俺たちに任せろ
!、 ̄ ̄ ̄ ヽ | | /  ̄ ̄ ̄/
ヽ_/ヽ、 ヽ__) \__/\_/. /_/ ノヽ_/
 ̄  ̄ ̄
このスレはコード書き込みOKです。
作成依頼もOKですが、作成依頼限定ではありません。
コードが嫌な人は別スレ建ててください。
※前スレ
Excel VBA 質問スレ Part36 [転載禁止]©2ch.net・
http://peace.2ch.net/test/read.cgi/tech/1419718732/
※頭のレスの方でキチガイが束縛テンプレを貼る詐欺行為が前スレまで散見されましたので、十分にご注意ください。
0685デフォルトの名無しさん
2015/07/23(木) 19:23:54.97ID:Vrk4ENFd> SetとLetだろって話なんだが
Set と Let の話してる奴等に
>> ところでお前ら、Letって命令あるのちゃんと知ってるか?
とか言い出したアホがいるって話なんだけど...
0686デフォルトの名無しさん
2015/07/23(木) 19:24:52.80ID:jdzUEZ4l0687デフォルトの名無しさん
2015/07/23(木) 19:25:27.87ID:jdzUEZ4l0688デフォルトの名無しさん
2015/07/23(木) 21:34:40.50ID:fIFeUYpQSetのあるなしじゃなくて って所を外してるのは、わざとですか?
そこが重要だと理解できてないのですか?
0689デフォルトの名無しさん
2015/07/23(木) 23:17:13.99ID:OfB5opukわざとです
論点はあくまでも >>636 ですから
0690636
2015/07/23(木) 23:55:08.79ID:h4tQPyFC0691デフォルトの名無しさん
2015/07/26(日) 02:05:49.12ID:PMtslnm/選択中の値・・・ドロップダウンリストが表示された状態で
マウスカーソルがあわさっている値を取得、なんてできますか?
0692デフォルトの名無しさん
2015/07/26(日) 02:31:29.01ID:2OSSYxBC0693デフォルトの名無しさん
2015/07/26(日) 11:51:18.54ID:PMtslnm/リストボックスにしてみます
0694デフォルトの名無しさん
2015/07/29(水) 22:52:06.65ID:P4eNlM/m0695デフォルトの名無しさん
2015/07/29(水) 22:54:37.84ID:c3o2n8R70696デフォルトの名無しさん
2015/07/29(水) 23:36:18.80ID:P4eNlM/m何かのタイミングでactiveが変わってしまったら危ないんじゃないかと思ったんですが、そういう事は起こり得ないんですか?
0697デフォルトの名無しさん
2015/07/29(水) 23:50:54.16ID:c3o2n8R7"Book1 - copy.xlsx"
みたいになると思うので、その名前を使えば良いんじゃないの?
0698デフォルトの名無しさん
2015/07/29(水) 23:59:24.34ID:HfzTZxWN0699デフォルトの名無しさん
2015/07/29(水) 23:59:46.07ID:hQM1TMMz0700デフォルトの名無しさん
2015/07/30(木) 00:00:27.52ID:ds/Apgk5名前もその時の状況で変わるので使いづらいです
自分が書いたコードではworkbookオブジェクトを新しく作ってからそこにシートコピーしてるのでactiveworkbookはつかってないんですが、
workbook.sheets(1).copyからもactiveworkbookを使わずオブジェクトを取得できたら楽かなぁと思って質問した次第です
0701デフォルトの名無しさん
2015/07/30(木) 00:15:11.00ID:AfvBuYEQ事前にチェックすれば良いだけだろハゲ
0702デフォルトの名無しさん
2015/07/30(木) 01:58:48.20ID:iv9Zs1qnWorksheets(1).Copy
Set mybook = Workbooks(Workbooks.Count)
mybook.Sheets(1).Range("A1") = "ABC"
End Sub
0703デフォルトの名無しさん
2015/07/30(木) 04:18:29.77ID:3TLsFD+RDim 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
0704694
2015/07/30(木) 22:02:11.70ID:ds/Apgk5ありがとうございました
0705デフォルトの名無しさん
2015/07/31(金) 03:12:44.99ID:aPbYdwRE馬鹿なのお前?
0706デフォルトの名無しさん
2015/07/31(金) 23:33:53.17ID:q+UwAnSR0707デフォルトの名無しさん
2015/07/31(金) 23:40:31.13ID:pDlCqfLx0708デフォルトの名無しさん
2015/07/31(金) 23:44:01.31ID:q+UwAnSR0709デフォルトの名無しさん
2015/08/02(日) 08:29:07.26ID:lFlP6vKjところが普通に名前をつけて保存だと"を付いてくれないっぽい
"aaa,bbb","cccc","d","eee","ff"
こういうcsvファイル作りたいんだけど、
VBAからテキストに書くしか方法ない?
元のEXCELファイルでは
カンマが入力されてる位置も数も法則性はありません
0710デフォルトの名無しさん
2015/08/02(日) 09:24:03.34ID:js+6DYN9それがExcelの仕様
諦めてVBAを書くか、""なしで書き出したテキストファイルを
PerlやRuby等の簡易な言語で加工するか
0711デフォルトの名無しさん
2015/08/02(日) 10:54:43.64ID:pHbT44ug特にC++はアスペ
0712デフォルトの名無しさん
2015/08/02(日) 11:55:18.99ID:zAkA6wkz0713デフォルトの名無しさん
2015/08/02(日) 12:23:27.67ID:lFlP6vKj行数多いので処理時間が少し心配ですが、
VBAでやってみます
他言語はvbsで保存後に「,」を「","」に置き換え
加工できるかなとは少し考えてました。
でも置き換え対象外の「,」もあるわけで、
保存後だと判定が難しそう
0714デフォルトの名無しさん
2015/08/02(日) 13:06:35.44ID:ZRhH79SV試した範囲では、少なくともセル中にカンマを含む場合はちゃんと""で囲んでくれるようだが
まあ、CSVはいろいろ細かいとこが違うから気に入らないなら自分で書き出すのが確実だけど
0715デフォルトの名無しさん
2015/08/02(日) 14:52:37.26ID:egshDkukこの処理中にリンクされたセルの値が変化した場合、
実行中のWorksheet_Changeは中断され、新たにWorksheet_Changeが開始されるのでしょうか?
それとも、実行中のWorksheet_Changeは引き続き実行され、同時並行にWorksheet_Changeが開始されるのでしょうか?
また、上記のどちらであるかを確認する方法があるようでしたら教えていただきたいのです。
よろしくお願いします。
0716デフォルトの名無しさん
2015/08/02(日) 15:09:53.80ID:QrDJWkft処理の中に対象セルの値を変化させるコードがある場合、そこから新たに実行される。
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/e2c0718デフォルトの名無しさん
2015/08/02(日) 16:32:16.48ID:dkS/+hk9A列 金種
B列 枚数
C列 金額
でB、Cの何れか片方に入力されたらもう片方を再計算するようにしたことならあるけど…
0719715
2015/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そういうのがわずらわしいからTab文字でセパレートするんやで
つーか全レコード舐めて使ってない文字なら何でもいいが
0721デフォルトの名無しさん
2015/08/03(月) 10:07:35.51ID:IvRPgtVsアドイン探したらあったよ?
Excel CSV I/O
使ってみたら。
0722デフォルトの名無しさん
2015/08/03(月) 15:40:21.92ID:JhhThk5t0723デフォルトの名無しさん
2015/08/04(火) 18:12:48.60ID:Xu3GeQZL0724デフォルトの名無しさん
2015/08/04(火) 19:13:09.63ID:qaA+gaVg-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:yfcMdSNWExcelでのタブ区切りはテキスト形式指定で保存できる
関連付けは.txtなのでメモ帳になってるのが一般的だな
開くのはEXCELでちゃんと開ける
そもそもcsvはComma-Separated Valuesの略だとされてるから
タブ区切りがcsvじゃおかしいだろうって言う話があってtsvと呼んだりするけど
それ以外の区切り形式も全部ひっくるめてcsvと呼ぶこともある
いちおう今はRFCとかもあるけど、それ以前から存在するし実はかなりカオスな形式
0727デフォルトの名無しさん
2015/08/06(木) 21:55:53.33ID:i7HDVQtVCreateObject("Outlook.Application").CreateItem(0)
でメールの下書きをいくつかたくさん作ります。
そのあとつくった全部に対して同じ処理をしたいのですが
このCreateItem(0)で作ったメールの下書きのコレクションを取得する方法ってどうやればよいでしょうか?
0728デフォルトの名無しさん
2015/08/06(木) 22:24:14.34ID:JI2t4Gst0729デフォルトの名無しさん
2015/08/06(木) 23:00:42.60ID:hJ1X31cMoutlook研究所に行けよ
0730デフォルトの名無しさん
2015/08/06(木) 23:53:13.21ID:3nTeNGfy0731デフォルトの名無しさん
2015/08/11(火) 21:35:11.54ID:gtl50mbfAAA BBB AAA CCC
と表示されているのを
AAA BBB CCC
と、つまり重複文字列を
削除するVBAのコードを何卒
お願いしますm(_ _)m
0732デフォルトの名無しさん
2015/08/11(火) 22:49:00.10ID:my6QzTuQ0733デフォルトの名無しさん
2015/08/11(火) 23:00:31.84ID:gtl50mbf一つにセル内の話です。
例えばA1内に
あああ あああ 200 200
と文字列がある場合に
マクロ実行で
あああ 200
のように。
(かなり困ってますので
お助けを…(_ _))
0734デフォルトの名無しさん
2015/08/11(火) 23:02:52.20ID:Rnp54Swm0735デフォルトの名無しさん
2015/08/11(火) 23:14:47.60ID:Rnp54Swm0736デフォルトの名無しさん
2015/08/11(火) 23:24:55.02ID:3YchA3jD0737デフォルトの名無しさん
2015/08/11(火) 23:43:59.37ID:gtl50mbf単一セル内
>>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:AxCPtTKKSub こんなんどないや()
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ありがとう御座います。
明日、会社で試してみます。
なんか出来そうな予感は
して来ました(笑)
(夜分遅くに本当に感謝です、他にも
ありましたら何方かなるべくシンプルな
やつでお願いします(^ ^;))
0740デフォルトの名無しさん
2015/08/12(水) 01:06:27.62ID:svAFeBJnエラー無視させるかキーが当たったら登録させないかは好みで分かれるところだな
0741デフォルトの名無しさん
2015/08/12(水) 09:21:11.40ID:ybFGXm8Qエラートラップとかはできる限り使いたくないから
> キーが当たったら登録させない
派だな
0742デフォルトの名無しさん
2015/08/12(水) 12:37:40.94ID:bqbcCRVaカメラで撮ったらシートに画像がすぐに貼り付けられるとか
バーコード呼んだらセルに入力されるとか
0743デフォルトの名無しさん
2015/08/12(水) 13:40:00.14ID:CjCTxmpZまあ元のソースが別のセルに入ってるのをわざわざ連結してから処理してる意味がわからないけど
0744デフォルトの名無しさん
2015/08/12(水) 13:42:43.23ID:Qp9NewvKgoogleスプレッドシートでやるといいよ
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思わないな
0747745
2015/08/12(水) 23:40:12.65ID:e6JBBjJ+じつは、マクロで図を挿入するのを作っていて、「Excel2010でPictures.Insertすると
リンク貼り付けになる」ということなので、いろいろ調べたら「代替テキストに画像のフルパスが
あるなら、挿入にできる」っていうのを見つけた。で、2007だと代替テキストにフルパスが
入ってるけど、2010は、なし。じゃ、ということで2010で代替テキストにフルパスを書き込む
ようにした。で、リンク貼り付け→挿入にできるようになったんだ。これ、>>745カキコしてから
ようやっとできた。だけど、んにゃ、どっかにフルパス情報当然あるはず、と思うんだけど。
ちなみに「AddPicture」は、どうもしっくりこなくて。
0748デフォルトの名無しさん
2015/08/13(木) 01:00:44.65ID:CPI6SZk7「代替テキストに画像のフルパスがあるなら、挿入にできる」って
なにそれリンクプリーズ
0749デフォルトの名無しさん
2015/08/13(木) 01:24:42.76ID:UOPmO2ID0750デフォルトの名無しさん
2015/08/13(木) 09:28:42.30ID:jLoATrScこれです。
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1284060567
要は、画像リンクで貼り付けられてる、画像のフルパスがわかれば、リンク貼り付け→挿入にできる。
Excel2007は、代替テキストに入ってるから、もしリンク貼り付けでも対処できる。2010は、手動貼付けや
Pictures.Insertでは、代替テキストにはフルパスは入らない。マクロで入るようには、もちろんできる。
じゃ、すでに手動なりでリンク貼り付けになってる(フルパス情報なし)のを、挿入にしたいから
図のフルパスを知りたい、ってことなんだわ。ネットで、いろいろググってるんだけど、見つからなくて。
0751デフォルトの名無しさん
2015/08/13(木) 10:30:47.40ID:XEpKKFYz0752750
2015/08/13(木) 11:38:58.21ID:jLoATrScレスありがとう。教えてもらった通りの操作を、マクロ記録してみました。
それを利用して、画像フルパスなくても、一度に何枚のリンク画像でも、
挿入にできました。この方法は、思いつきませんでした。日頃のExcel操作が
大事だと改めて思いました。教えていただき、ありがとうございました。
(目的を達成したので、とりあえずリンク画像のフルパス取得は、保留にします。)
0753デフォルトの名無しさん
2015/08/13(木) 14:10:15.23ID:XEpKKFYzコピペも対処療法的な感じで非常にアレだ
0754デフォルトの名無しさん
2015/08/13(木) 18:40:42.85ID:e6rsnF6N「対処療法」じゃなくて正しくは「対症療法」だよ
0755デフォルトの名無しさん
2015/08/14(金) 20:13:43.07ID:8ARrFh/Iこう書くと数式も含まれてコピーされるようですが
値のみを繁栄させたい場合はどう書けばいいのでしょうか?
0756デフォルトの名無しさん
2015/08/14(金) 20:19:39.62ID:kkHnja52マクロ記録モードにして
「値で貼り付け」の操作をするとわかる
0757755
2015/08/14(金) 20:21:57.58ID:8ARrFh/Iこの質問の意図は
Range("A1").Copy
Range("B2").PasteSpecial Paste:=xlPasteValues
とすれば出来るのでしょうが1行で記述したいということです。
>>756
ありがとうございます
0758デフォルトの名無しさん
2015/08/14(金) 20:43:22.05ID:GC+yzDGQ私の記憶が確かなら、.valueは計算結果の値であって、数式はとれないはずですが。
EXCELのバージョンは?
0759755
2015/08/14(金) 20:54:01.53ID:8ARrFh/I2003です、、
表の集計で使っていますが
今まではダイレクトに書かれた数値をコピペしていたところを
=a1 のようなセル参照で抽出する用に変えたのですが
結果の数値が全部0になりよく調べると =a1 ごとコピーされて
結果セルの式は=a100とかと表示されていてだめだこれはといった感じです
0761デフォルトの名無しさん
2015/08/14(金) 22:41:06.93ID:kkHnja52できない
「値で貼り付け」はPasteSpecialメソッドにしかない機能なので
まずCopyしておく必要がある
0763デフォルトの名無しさん
2015/08/14(金) 23:45:05.71ID:G78FLFmYうちは2007だけど
Range("a1").Value = Range("b1").Value
でちゃんと数値がコピーされるなー
ところでこんなんどないや
Range("a1").Value = Evaluate(Range("b1").Formula)
0764デフォルトの名無しさん
2015/08/15(土) 00:27:53.07ID:fL/PzS3/2010でもその通り、値のコピーとなった。
>>761はウソ。
0765デフォルトの名無しさん
2015/08/15(土) 00:46:57.24ID:tvgFL4BIこれは動くのですが
Dim mm(2)
mm(1) = ActiveSheet.Shapes.AddLine(10, 10, 50, 50).Name
mm(2) = ActiveSheet.Shapes.AddLine(120, 20, 60, 60).Name
ActiveSheet.Shapes.Range(mm).Select
コレクションに置き換えると動きませんでした
Set nn = New Collection
nn.Add ActiveSheet.Shapes.AddLine(10, 10, 50, 50).Name
nn.Add ActiveSheet.Shapes.AddLine(120, 20, 60, 60).Name
ActiveSheet.Shapes.Range(nn).Select
諦めて配列を使うしかないのでしょうか それともcollectionの使い方がわるいのでしょうか
0766デフォルトの名無しさん
2015/08/15(土) 07:06:47.86ID:j7Z0urAN1つのブックに600シートぶち込んでしまうのと
300シートに分割して2ブックにするのと
200シートで3ブックにする
のではどれがお勧めでしょうか?
600シートの総データ数は300MBほどです。
1ブック200シートのデータ作成は成功しましてまあそれなりに止まることなく動くというのがわかりました。
0767デフォルトの名無しさん
2015/08/15(土) 10:12:24.14ID:Rw3ql/9W0768デフォルトの名無しさん
2015/08/15(土) 10:27:23.30ID:cR607+81自分で作れてるんなら、実用性次第じゃないの?
0769デフォルトの名無しさん
2015/08/15(土) 10:42:17.52ID:p/7d84Nq0770デフォルトの名無しさん
2015/08/15(土) 15:23:11.33ID:7AZQcdGh150シートに分割して4ブックにすることもできすし
120シートに分割して5ブックにすることもできすし
100シートに分割して6ブックにすることもできす。
しかし分割して7ブックにすることはできません。
これは7が600の約数ではないからです。
小学生の算数の授業でした。
0771デフォルトの名無しさん
2015/08/15(土) 15:48:36.88ID:Bgl+GJFE分割は等分とは限らないんだぜ?
0772デフォルトの名無しさん
2015/08/15(土) 16:23:48.83ID:mbZast3u0773デフォルトの名無しさん
2015/08/15(土) 16:33:01.59ID:HxCw3c0C0774デフォルトの名無しさん
2015/08/15(土) 17:04:42.31ID:B4BgWceW0775デフォルトの名無しさん
2015/08/15(土) 17:10:19.88ID:B4BgWceWShapes.Rangeの引数は、配列は許すがコレクションは許さない
0776デフォルトの名無しさん
2015/08/15(土) 22:40:04.13ID:+545fZTC0777デフォルトの名無しさん
2015/08/15(土) 22:51:46.86ID:4BB87GxSネットの解説ページで充分
0778デフォルトの名無しさん
2015/08/15(土) 22:53:48.65ID:fL/PzS3/0779デフォルトの名無しさん
2015/08/15(土) 22:55:28.05ID:EaRAq5430780デフォルトの名無しさん
2015/08/15(土) 22:58:58.19ID:UUBlauo70781766
2015/08/15(土) 22:59:00.32ID:4BB87GxS100メガぐらいある200シートあるファイルを作り3つを同じに開いて処理させようとしたら・・・
3つめでリソース不足で開けませんと出てきました THE END
まだ推測段階ですが1ブック400シート統合したファイルは開けたと思いますので巨大な1つのブックを作るのが正解のようです。
0782デフォルトの名無しさん
2015/08/15(土) 23:01:44.13ID:fL/PzS3/■ このスレッドは過去ログ倉庫に格納されています