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/
※頭のレスの方でキチガイが束縛テンプレを貼る詐欺行為が前スレまで散見されましたので、十分にご注意ください。
0652デフォルトの名無しさん
2015/07/22(水) 19:25:17.64ID:vbbcVbHR機種によるけど、Then Let の場合、ThenかLetを省略できるので、Thenを省略してより短いLetを残すことがった
あとはLet省略しても、自動的に補完される機種もあったな
0653デフォルトの名無しさん
2015/07/22(水) 20:53:03.95ID:h8BR7O6Q0654デフォルトの名無しさん
2015/07/22(水) 21:51:43.71ID:JCiitdGg今時 Let とか言い出したアホに言ってくれよ
0655デフォルトの名無しさん
2015/07/22(水) 22:14:32.64ID:f2fD5abO0656デフォルトの名無しさん
2015/07/22(水) 23:16:34.02ID:EIwMW7nuMID(文字列,開始位置,文字数)
じゃなくて、
関数(文字列,開始位置,終了位置)
で指定したいです
0657デフォルトの名無しさん
2015/07/23(木) 00:01:42.48ID:a8nLYx9Z関数 = mid(文字列,開始位置, 終了位置 - 開始位置)
end function
0658デフォルトの名無しさん
2015/07/23(木) 00:11:50.48ID:FtGSRY1fありがとう
天才だな
0659デフォルトの名無しさん
2015/07/23(木) 00:19:40.71ID:FtGSRY1fありがとう
天才だな
0660デフォルトの名無しさん
2015/07/23(木) 00:30:11.92ID:fIFeUYpQもともとはSetとの対比でLetって話だったはずだが
0661デフォルトの名無しさん
2015/07/23(木) 05:50:04.22ID:OfB5opukLet の省略 って書かんとわからんか
0662デフォルトの名無しさん
2015/07/23(木) 05:57:57.83ID:CPvEDQbc>>657 だと一文字切れると思うよ
正しくは
function 関数(文字列,開始位置,終了位置)
関数 = mid(文字列,開始位置, 終了位置 - 開始位置 + 1)
end function
>>661
それがそもそもsetとの対比の話題で出てきたんでしょ?
0663デフォルトの名無しさん
2015/07/23(木) 06:13:33.37ID:OfB5opuk省略とか言い出したのは >>647
そもそも Let の話してるのに
> ところでお前ら、Letって命令あるのちゃんと知ってるか?
とか言い出したり、ちょっとアレな人なんだろうと思う
0664デフォルトの名無しさん
2015/07/23(木) 06:48:31.93ID:H5D81+vI「終了位置」の定義によるだろう。
普通は、長さ = end - begin となるようにするから>>657でいいと思うが。
0665デフォルトの名無しさん
2015/07/23(木) 07:14:32.88ID:CPvEDQbc>定義による
まさにその通りなんだけど、
たとえば、文字列 "あいうえお" から "うえ" を取り出したいときには
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どんな普通だよ w
'あいうえお' の2文字目から4文字目って言われたら大抵の人は 'いうえ' って思うんじゃね?
0667デフォルトの名無しさん
2015/07/23(木) 07:21:49.64ID:Vrk4ENFdリロードしとらんかった...
例えが同じすぎて笑たわ
0668デフォルトの名無しさん
2015/07/23(木) 07:22:43.57ID:Z5SWxUfX関数("あいうえお", 3, 5)
とするわけだが、配列の長さは UBound - LBound + 1 だったりするから何が「普通」かは一概に言えない。
0669デフォルトの名無しさん
2015/07/23(木) 07:53:15.29ID:h4tQPyFC0670デフォルトの名無しさん
2015/07/23(木) 07:57:28.09ID:Z5SWxUfXつまり終了位置のひとつ先を引数に設定するのは「普通」のうちに含まれるという主張。
0671デフォルトの名無しさん
2015/07/23(木) 08:13:20.35ID:h4tQPyFC0672デフォルトの名無しさん
2015/07/23(木) 08:20:43.91ID:Vrk4ENFdむしろその +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こういう場合に+1する・しないで俺は昔からよく混乱する事があったんだが、最近では何も考えずに無の境地でプログラミングすると、一発で上手く行くようになったよ。
0675デフォルトの名無しさん
2015/07/23(木) 11:46:51.39ID:SI8SSCXa誰がどう見ても>>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+2vsWInStrで「う」と「え」をサーチしたあとに取り出したいとかあるから
関数("あいうえお", 3, 4)
の方が使い勝手がいいと思う
それから「あいうえお」からこの関数をあえて使って「えお」を取り出すときに
関数("あいうえお", 4, 6) だとちょっと気持ち悪いというのもある
個人的な意見だけど
0678デフォルトの名無しさん
2015/07/23(木) 12:57:29.05ID:Vrk4ENFd書き方は色々あっていいけど、終了位置って普通最後の文字を指すでしょ
0679デフォルトの名無しさん
2015/07/23(木) 15:55:49.36ID:fIFeUYpQSet有りと無しではとか言ってる人に、Letって知ってるかって言うのはおかしくないだろ
そこはSetとLetでって書くべきなんだから
0680デフォルトの名無しさん
2015/07/23(木) 16:12:59.04ID:mmfWdiQl0681デフォルトの名無しさん
2015/07/23(木) 16:53:53.03ID:Vrk4ENFdスレを辿ることもできないのかよ...
>>636 からの話だぞ
0682デフォルトの名無しさん
2015/07/23(木) 17:01:14.71ID:Vrk4ENFd(出川口調で)お前はバカか w ⇒ >>656
0683デフォルトの名無しさん
2015/07/23(木) 17:44:01.97ID:fIFeUYpQその流れがあるからこそ、SetのあるなしじゃなくてSetとLetだろって話なんだが
まあ話が通じないならもういいや
0684デフォルトの名無しさん
2015/07/23(木) 19:13:36.15ID:Z5SWxUfXと
(長さ、終了位置)
のどっちだったか思い出せなくて悩むはめになる。
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:XEpKKFYz■ このスレッドは過去ログ倉庫に格納されています