◎正当な理由による書き込みの削除について:      生島英之とみられる方へ:

Excel VBA 質問スレ Part50 [無断転載禁止]©2ch.net->画像>30枚


動画、画像抽出 || この掲示板へ 類似スレ 掲示板一覧 人気スレ 動画人気順

このスレへの固定リンク: http://5chb.net/r/tech/1503805217/
ヒント:5chスレのurlに http://xxxx.5chb.net/xxxx のようにbを入れるだけでここでスレ保存、閲覧できます。

1デフォルトの名無しさん 転載ダメ©2ch.net (ワッチョイ 7e6d-ffY6)2017/08/27(日) 12:40:17.57ID:LjjEWylk0
!extend:checked:vvvvv:1000:512

スレ立ての際は一行目に
!extend:checked:vvvvv:1000:512
と入れてスレ立てして下さい

ExcelのVBAに関する質問スレです
コード書き込みや作成依頼もOK

※関連スレ
VBAなんでも質問スレ Part2
http://mevius.2ch.net/test/read.cgi/tech/1432173164/
Access VBA 質問スレ Part1
http://mevius.2ch.net/test/read.cgi/tech/1328536426/
Excel総合相談所 126
https://mevius.2ch.net/test/read.cgi/bsoft/1496487719/

※前スレ
Excel VBA 質問スレ Part49©2ch.net
http://mevius.2ch.net/test/read.cgi/tech/1498410914/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured

2デフォルトの名無しさん (ワッチョイ a511-P7rv)2017/08/27(日) 13:54:51.09ID:jYGHj9310
いちおつしないとおちちゃうよ

3デフォルトの名無しさん (ワッチョイ ed6f-2x4P)2017/08/27(日) 15:00:10.00ID:e4TdDFEN0
Excel VBA 質問スレ Part50 [無断転載禁止]©2ch.net->画像>30枚

4デフォルトの名無しさん (アウアウウー Sa91-xxBf)2017/08/27(日) 16:42:30.51ID:TgR8VSWoa
初心者です。お時間がありましたら、アドバイス願います。
「自分のペースでゆったり学ぶ EXCEL VBA」という本を使って
勉強しています。シートを任意の場所にコピーするという項目で、
エラーが出てしまいます。

Sub 納品書シート作成()
 ThisWorkbook.Worksheets("納品書").Copy _
After := ThisWorkbook.Worksheets(3)
End Sub

これを実行すると、「修正候補:式」と出て、「After :=」の部分が赤色になります。
何が問題なのでしょうか。よろしければ教えてください。

EXCEL2010を使用しております。

5デフォルトの名無しさん (ワッチョイ 4a06-oKtA)2017/08/27(日) 17:08:53.71ID:WmqrsSrM0
>>4
こっちも2010
そのプロシージャまんまコピーして(勿論「納品書」シートも作って)実行したけど正常終了
念のためワークシート数を2枚にして実行すればエラーになるけどそれはインデックスが有効な範囲にないというエラーで
そちらのエラーにはならない。

一応確認しておくけど、VBEditorの画面で上のデバッグ(D)からコンパイルをしてエラーは無い?

6デフォルトの名無しさん (ワッチョイ fe6d-VVOB)2017/08/27(日) 17:09:02.52ID:LjjEWylk0
>>4
時間がないやつは最初からアドバイスなんて出来ない。読むのめんどくさいだけだからそういう社交辞令は書かないほうが良い

で、2010だけどエラーが出なかった。式はおかしくないはず
Worksheets(3) は、3つめのシートを表す。シートが3つ以下だとエラーが立つが、その場合は「インデックス~」のエラーになる
もし可能ならブックごとアップロードしてほしい

7デフォルトの名無しさん (ワッチョイ a511-P7rv)2017/08/27(日) 17:42:10.42ID:jYGHj9310
>>4
改行のアンダーバーの前にスペース入れ忘れてるとかそんなんは?

8デフォルトの名無しさん (アウアウウー Sa91-xxBf)2017/08/27(日) 18:33:58.27ID:TgR8VSWoa
>5,6,7
ありがとうございます。
デバックというのを試してみましたが、同じような結果になります。

ファイルをアップロードしてみました。Dkeyは1111です。
http://www.dotup.org/uploda/www.dotup.org1351357.xlsx.html

9デフォルトの名無しさん (ワッチョイ fe6d-iRjW)2017/08/27(日) 18:52:31.15ID:LjjEWylk0
>>4>>8
よく分からない。普通にうまくいく(シート「納品書」がなかったからテキトーに作ったけど)
Excel VBA 質問スレ Part50 [無断転載禁止]©2ch.net->画像>30枚

10デフォルトの名無しさん (ワッチョイ ed6f-2x4P)2017/08/27(日) 19:12:47.61ID:e4TdDFEN0
>>8
マクロを含むファイルは xlsm で保存しないとダメじゃね?

11デフォルトの名無しさん (アウアウカー Sa85-HXRX)2017/08/27(日) 19:19:16.69ID:uEidIgYqa
うむ。
xlsxで保存するとマクロが消えるよ。

12デフォルトの名無しさん (ワッチョイ 868f-vgeI)2017/08/27(日) 20:15:32.32ID:HYoDzU2+0
>>4
出版社のページでダウンロードしてきたらどうでしょうか?
正誤表は無いみたいですね。

13デフォルトの名無しさん (ワッチョイ 4a06-oKtA)2017/08/27(日) 22:32:38.03ID:WmqrsSrM0
>>8
まず最初にエクスプローラーのツール→フォルダーオプションの
表示タブで”登録されている拡張子は表示しない”のチェック外せ。
んで、拡張子xlsxとxlsmの違いについてVBAのその入門書の最初から読んで
勉強し直せ

14デフォルトの名無しさん (ワッチョイ 392c-0bAf)2017/08/27(日) 23:11:29.74ID:y/dGwO3j0
vbaってpcのスペック関係あるん?
オフィス2010の32ビットでメモリー4gで全てのシートの枠線を一括して色変えろってのをやってるけど
すぐ動作しなくなるんだよね、俺のマクロが可笑しく書いてるだけかな

15デフォルトの名無しさん (ワッチョイ fe6d-sGSh)2017/08/27(日) 23:37:22.62ID:LjjEWylk0
>>14
ある
Excelは割りと最適化してくれるけど、最適化しないとこは猛烈に重い

あと、ヘタにvbaコード書くよりマクロの記録をまるまるコピペしたほうがいい場合も多い

16デフォルトの名無しさん (ワッチョイ a511-P7rv)2017/08/27(日) 23:57:27.56ID:jYGHj9310
たしかに枠線の色はパンチ効いてそうだな、メモリ的に

17デフォルトの名無しさん (ワッチョイ fe6d-iRjW)2017/08/28(月) 00:07:43.72ID:8e8g8cz+0
枠線じゃなくて罫線ね
色に関する機能はとにかく重い

18デフォルトの名無しさん (ワッチョイ 293d-oKtA)2017/08/28(月) 00:21:31.22ID:uF0tQjXI0
どのくらいの大きさのものか、どのくらいの処理から重いと言うのかにもよるけど、
>>14と変わらない環境で5000行50列を縦横別々の判定で罫線引いてセルの背景色を行毎に変えて重要項目に個別に色付けてって処理でも五秒もあれば完了するし、
実務に影響が出るほど遅いって事なら、たぶんUnionでセルをまとめずに一つ一つに処理が発生するような事してるのでは?

処理の順番や組み合わせ次第で装飾的な処理はかなり軽く出来るはず。
GPU並の応答速度をセルに要求するなら知らんけど。

19デフォルトの名無しさん (ワッチョイ 86aa-oTLP)2017/08/28(月) 06:09:18.70ID:4ejthJEF0
銀行にはデータセンターがあって、機械で文字識別に失敗したものが、処理される

3人の職員が、画像を見ながら、金額を打ち込んで、3人とも同じなら合格

殴り書きの人がいるから。
これは、郵便局でも同じ

スレ違いだけど

20デフォルトの名無しさん (ワッチョイ ed6f-2x4P)2017/08/28(月) 17:53:40.80ID:pLim95Ou0
その銀行のシステムをExcelで作っているのでなければどうでもいいな

21デフォルトの名無しさん (ワッチョイ 6f06-X0kF)2017/09/01(金) 18:17:33.81ID:aTcGbRyI0
点数 人数 名前
10 0
9
8 3 foo bar moge
7 5 piyo poo


こういう感じのn行×3列の表があります。
人数は、その点数を取った人数です。

22デフォルトの名無しさん (ワッチョイ 6f06-X0kF)2017/09/01(金) 18:23:17.66ID:aTcGbRyI0
すみません、途中で投稿してしまいました。

点数 人数 名前
10 0
9 1 hoge
8 4 foo bar moge
7 5 piyo poo…
6 9 …


こういう感じのn行×3列の表があります。
人数は、1列目の点数を取った人の数です。

人数を上から足していって、初めて10を超えた行より上の行の背景色を変える、ということは、
「条件付き書式」で可能でしょうか?

23デフォルトの名無しさん (ワッチョイ 333d-b8Mh)2017/09/01(金) 18:36:17.67ID:phDteRqs0
>>22
ここVBAスレだからエクセルのスレで聞いた方がいいのでは。

VBAやってる人間って基本的にエクセルの機能知らなくて、
自分で実装した後にそういう機能がある事知って悶絶するのが普通だし。

24デフォルトの名無しさん (ワッチョイ ff11-BPzU)2017/09/01(金) 18:46:07.83ID:A4rxsWGh0
>>22
人数の累積が10以上かどうかを示す列を追加したら
こんな感じで出来るんでない?

=OR(AND($D4=0, $D5=1), $D5=0)

D列が累積10以上かどうかの列
0なら10未満、1なら10以上
上の例は5行目に設定した条件付き書式

25デフォルトの名無しさん (ワッチョイ 636f-X0kF)2017/09/02(土) 10:23:46.50ID:1XOwz87o0
>>22
俺ならD列には上からの合計人数を出す式を追加して
D列の値が10未満かどうかで条件付き式書式を設定する

26デフォルトの名無しさん (ワッチョイ 43aa-k/3h)2017/09/02(土) 10:28:20.75ID:m6EVfTkB0
Sub SetGUID()
'On Error GoTo Err_Check:
Dim ref As Reference
End Sub

でコンパイルエラーが出ました。Referenceをで意義してなとのことです。
Referenceをインポートしなければいけないのでしょうか?

27デフォルトの名無しさん (ワッチョイ 636f-X0kF)2017/09/02(土) 11:21:10.40ID:1XOwz87o0
reference型は存在しない

28デフォルトの名無しさん (ワッチョイ 43aa-k/3h)2017/09/02(土) 11:56:02.84ID:m6EVfTkB0
ありがとうございます。

29デフォルトの名無しさん (アウアウカー Sa07-darD)2017/09/02(土) 14:35:26.83ID:SpCYKXrKa
>>22
B列に条件付き書式で
=SUM($B$1:$B1)<10
いけるんじゃね。

3022 (ワッチョイ cfd3-X0kF)2017/09/02(土) 18:32:32.23ID:JEC7rQdw0
皆様ありがとうございます。
累積人数の作業列を用意するやり方でできました。

3128 (アウアウカー Sa07-darD)2017/09/02(土) 21:49:19.26ID:BeXWDCQaa
>>29
何で列を追加する必要がある?
一番上のセルを絶対座標にして下のセルの行番号を相対にすれば各行迄の累積人数取れるじゃん。

32デフォルトの名無しさん (ワッチョイ ff11-BPzU)2017/09/02(土) 22:25:34.44ID:9PaYDv7F0
>>31
それってスケールしなくない?

33デフォルトの名無しさん (ワッチョイ a38f-6h2J)2017/09/02(土) 22:28:15.89ID:kdjl/egy0
苦いもんな

34デフォルトの名無しさん (ワッチョイ 636f-X0kF)2017/09/03(日) 03:52:33.65ID:gP322rFm0
それはケール

35デフォルトの名無しさん (ワッチョイ 53db-6h2J)2017/09/06(水) 01:23:13.87ID:QcvNAHMq0
ExcelではなくPowerPointのVBAになるのですが、該当するスレがないので質問させてください。

PowerPointのpptxにmsoEmbeddedOLEObjectの形で埋め込まれているエクセルファイル(xls,xlsx両方あり)を、
マクロを使って連続的に(複数埋められている)取り出し、別ファイルに保存したいと考えています。
(大本のファイルの破損のため、埋め込みファイルから復元する必要がある)
zipに拡張子変更して解凍、とすれば取れるのは知っているのですが、ファイル名の対応が取れなくなるため、
マクロ上で番号を付けて保存するのが目的です。

大まかにこのような形になるはず、と、抜き出し直前までの処理を作ったのですが、実際の保存処理について、
いろいろ試したのですがうまくいきませんでした。
PowerPoint上でのVBAマクロはニッチすぎてググっても情報に出くわさず、ましてやデータの抜き出しのような
ものはさらに見当たらない状態で、詰んでしまいました。
どのようにすれば保存できるか、ご教授願えますでしょうか?

For Each oSld In ActivePresentation.Slides
  For Each oShp In oSld.Shapes
    Select Case oShp.Type
      Case msoEmbeddedOLEObject
        If (Left(oShp.OLEFormat.ProgID, 5) = "Excel") Then
        'ここに処理を入れるはず
End If
    End Select
  Next
Next

36デフォルトの名無しさん (ワッチョイ ff11-BPzU)2017/09/06(水) 01:53:39.78ID:x6m+UIsj0
>>35
SaveAsやSaveCopyAsで動かないってことなのかな?
PowerPoint/Excelのバージョンやうまく行かなかった方法とエラー内容書かないとわからないね
正攻法でダメなら新しいExcelブックを作ってコンテンツコピーして保存するとか

37デフォルトの名無しさん (ワッチョイ 43e3-3QX8)2017/09/06(水) 11:39:49.13ID:12U08c7K0
エクセルVBAの課題ですがコードがわかりません。教えてください
下記がコードになります。
参考書の該当構文はInStrRev関数を使う事になるのですが半角スペースを指定する方法がわかりません
Dim temp As String
Dim pos As Long
Dim vName As String
Dim i As Long

For i = 2 To 6
temp = Cells(i, 2).Value
'半角スペースの位置をInStrRev関数を使用して取得し、変数posに代入する

'「氏名」から「名」のみを取得して変数vNameに代入する


Debug.Print vName
Next

考えたコードは下記でシングルクォテーションの間にスペースを入れればスペースを検索できるかと思ったのですが
エラーになりました。
pos = InStrReV(VPath," ")
ちなみに、B列に氏名、C列にフリガナが入力されています。

3828 (アウアウカー Sa07-darD)2017/09/06(水) 14:58:34.88ID:8y9+dC+fa
>>35
取りあえず出来たけど今PC閉じたんで書き込めない。
PC開ける環境までもう少し待ってくれ。

>>37
良さそうなんだけど、1つ教えてくれ。
VPathって何だ?
コードの中に見あたら無いんだが。
tempとVPathの関係はどうなってる?

と書けばミスに気付くんじゃないかな。

39デフォルトの名無しさん (ワッチョイ 7373-sC3k)2017/09/06(水) 15:14:58.67ID:oWb3celv0
ついでに言うと、そもそもvって何よw
stringなのに。

4028 (アウアウカー Sa07-darD)2017/09/06(水) 18:33:42.98ID:8y9+dC+fa
>>35
PC開ける場所が無いから駅のホームで開けたったわ。

さて、PowerPointでやってみようとしたらマクロの記録って無いんだな。
どうせ、オブジェクトの埋め込みって他でも似たようなもんだろと思ってWordで埋め込みを記録してみた。
で、出来たコード見てPowerPointでも同じようにいけそうと見当を付けてからWord上で今度は埋め込まれたExcelオブジェクトを右クリックメニューから開くのを記録しようと思ったらメニュー表示されなくて記録出来なかった。
で、記録は出来なかったけどWordでも同じようにいけそうと分かったのでWordで埋め込みオブジェクトについてググったら下記が見つかった。

https://support.microsoft.com/ja-jp/help/408493

これを参考に下記の真ん中の文でいける思って実行してみたらブックは出来てたけど開くとシートが表示されない。
表示リボンの再表示ボタン押したら表示されたんで、保存前に表示しとけば良いのかと思って再表示処理のコードをPowerPointにあわせて修正したのが最初の文。
それからシートが表示されてないブックをVBEのプロジェクトエクスプローラで見ると他のブックも表示されてる。
PowerPointに張り付けたExcelオブジェクトは複数で、それらが開いたまま保存すると参照も保存されるようなので保存後に閉じる最後の文の処理を追加して他への影響を回避した。
(開いて保存を繰り返すと後の保存では前に開いて保存後に開いたままになってるのが影響する)

'hogeの後、連番のファイル名で保存
oShp.OLEFormat.Object.Windows(1).Visible = True
oShp.OLEFormat.Object.SaveAs "C:\Users\hoge\Desktop\hoge" & CStr(i) & ".xlsx"
oShp.OLEFormat.Object.Windows(1).Close
i = i + 1

4137 (ワッチョイ dbe3-otRg)2017/09/07(木) 09:48:18.13ID:YyZpQ4AD0
38できました。ありがとうございます。
サンプルコードコピペで何となく打ってたので変数が違ってました。
それ以外の変数は課題の変数名なので、なぜといわれても。
VBAもなかなか難しい

42デフォルトの名無しさん (ササクッテロラ Sp3b-r1nS)2017/09/07(木) 16:44:12.32ID:wb4fzXuzp
どなたかご存知でしたらご教示ください
ADODBのレコードセットから特定のフィールドを削除するにはどうしたら良いのでしょうか

Set rs = cn.Execute(select * from foo)

rs.Close

rs.Fields.Delete(n)

rs.Open

レコードセットが開いていると Delete メソッドがエラーになるので、いったん Close してから Delete するのですが、再度 Open したときに削除したはずのフィールドが復活してしまいます

43デフォルトの名無しさん (ササクッテロ Sp3b-xWDE)2017/09/07(木) 20:34:42.24ID:ddaTRsKCp
起動済みのインターネットエクスプローラを操作する上手い方法ありますか?

44デフォルトの名無しさん (ワッチョイ b66d-AjbO)2017/09/07(木) 20:45:36.76ID:m3E2HFS70
キーボードマクロ

45デフォルトの名無しさん (ワッチョイ f66f-xkdj)2017/09/07(木) 21:03:02.57ID:tDqTIin20
そら、Recordset 消してるだけだしな 毎回Recordset 消してどうしたいねん っていう
Save せんでええのんか っていう

46デフォルトの名無しさん (ワッチョイ 1a06-QyhX)2017/09/07(木) 22:52:40.38ID:vmFU5V5h0
select * なんてせずに使いたい行だけselect するってのはダメなんかい

47デフォルトの名無しさん (ワッチョイ 1a06-QyhX)2017/09/07(木) 22:53:51.32ID:vmFU5V5h0
あっ、行じゃなくフィールドね

48デフォルトの名無しさん (アークセー Sx3b-zX58)2017/09/07(木) 22:58:55.63ID:D42mXrqtx
>>42
選べよw

49デフォルトの名無しさん (ササクッテロラ Sp3b-r1nS)2017/09/07(木) 23:53:31.42ID:wb4fzXuzp
>>45
Save メソッドですか?

Recordset をファイルまたは Stream オブジェクトに保存します。

とMSDNに書いてあるから、やりたいこととは少し違う気がします
とはいえ、削除をコミットしたいという感覚は間違いありません

>>46
>>42のSQLはあくまでサンプルですが、SQL文そのものはインプットなので、編集はできない状態だと考えていただきたいです
その上で結果のレコードセットを編集して出力することを考えています

50デフォルトの名無しさん (ドコグロ MM92-34gH)2017/09/08(金) 08:13:46.68ID:lYRgyUUIM
削除クエリー走らせるとか

51デフォルトの名無しさん (ワッチョイ e36f-xkdj)2017/09/08(金) 09:31:09.93ID:+Trj8D4m0
>>43
マウスを動かしてクリック

52デフォルトの名無しさん (ワッチョイ e36f-xkdj)2017/09/08(金) 09:37:36.00ID:+Trj8D4m0
>>42
こういうことではないのか?
http://www.accessclub.jp/vbakaisetu/37.html

53デフォルトの名無しさん (ササクッテロレ Sp3b-r1nS)2017/09/08(金) 11:23:59.37ID:E+LN5uAqp
>>52
レコードセットから列を削除したいのです
やりたいことはこんな感じです

'1.クエリの実行
Set rs = cn.Execute("select A,B,C from foo")

'2.レコードセットから列Bを削除する
rs.Fields.Delete("B")

'3.残った列A,CをA1セル起点に貼り付ける
Range("A1").CopyFromRecordset rs


このとき、Fields.Delete メソッドはレコードセットが開いているとエラーになってしまいます
なので、>>42のように前後にClose、Openで挟んだのですが、Open実行時に削除したはずの列が復活してしまいます

54デフォルトの名無しさん (ドコグロ MMcb-Qch9)2017/09/08(金) 12:48:46.68ID:w53+SGPnM
>>53
> レコードセットから列を削除したいのです
取得しなきゃいいだけだろ...

'1.クエリの実行
> Set rs = cn.Execute("select A,C from foo")

5528 (アウアウカー Sa43-G+Vk)2017/09/08(金) 12:57:54.99ID:pmDC3Jkna
>>54
>>49でSQLは編集出来ないということらしい。

なんか、物凄く特殊なことしてるね。
レコード数から2次元配列作って1件ずつ入れてくといった泥臭い方法ぐらいしか無いんかね。

56デフォルトの名無しさん (アークセー Sx3b-zX58)2017/09/08(金) 15:26:46.89ID:ryF3+zd7x
>>49
そのインプットとやら
に工夫施す

57デフォルトの名無しさん (ワッチョイ e36f-xkdj)2017/09/08(金) 18:09:07.35ID:+Trj8D4m0
>>53
3貼り付けがAとCだけにすれば2は要らないのでは?

58デフォルトの名無しさん (ワッチョイ 17e4-60Gy)2017/09/08(金) 18:32:11.80ID:iUs2XBft0
初めからBをselectしなければ良いだけだけど、それが無理なら
張りつけてからB列消せば良いんじゃね

59デフォルトの名無しさん (ワッチョイ 9aaa-x/0H)2017/09/08(金) 20:18:25.34ID:v/BetMU00
select A,C,B のほうがよさげ

60デフォルトの名無しさん (ワッチョイ b754-34gH)2017/09/08(金) 21:03:05.17ID:ltI+C5Vk0
rsからrs2を作る

61デフォルトの名無しさん (ドコグロ MMba-Qch9)2017/09/08(金) 21:20:35.90ID:hXO+Cn8GM
>>55
> SQLは編集出来ないということらしい。
ああ、なるほど見落としてたわ
なら俺も泥臭い方法かSQLをパースして特定の列を抜いたSQLを組み立てるとかのトリッキーな方法しか思い付かんわ

6242 (ササクッテロレ Sp3b-r1nS)2017/09/08(金) 23:59:54.71ID:E+LN5uAqp
みなさんレスありがとうございます

>>55
やっぱりそうするしかないのでしょうかね
いったん配列に落とすとセルに貼り付けた時データ型やレコード数なども気にしなきゃならなくなるので、できればレコードセットのままなんとかしたいのですが…

>>57
そうなんだろうけど、CopyFromRecordsetだと全フィールド張り付いてしまいます
ループで1セルずつ貼り付けて行くと、>>55の言うような「泥臭い方法」と変わらなくなってしまいます

>>58
なるほど、レコードセットでどうにかできなければそれが一番いい方法かもしれません

>>60
それも考えましたが、rs2に複製の際にエラーが出てしまいました
今は手元に環境がないので、エラーの内容についてはまたの機会にします

>>61
SQLは select * になるかもしれないし、予想がつきません

63デフォルトの名無しさん (ワッチョイ 17e4-60Gy)2017/09/09(土) 01:05:27.10ID:Nbl3ImVw0
どういうSQLが来るかも分からないのに特定の列を消す必要があるという事だけは分かるのか

64デフォルトの名無しさん (ワッチョイ b62a-nhGI)2017/09/09(土) 01:14:41.31ID:F1q2327A0
文章の中から下みたいな文字列(URL)だけを削除するにはどうしたら良いんだろか。

http://2ちゃん.com/test/20170123456789

数字の部分がうまく処理できない。

65デフォルトの名無しさん (ワッチョイ 0b11-r1nS)2017/09/09(土) 02:28:27.21ID:oVzpXcHU0
>>64
正規表現を使うといいかもです

スマホで手打ちしてるんで細かい部分で間違いがあるかもしれませんが、イメージはこんな感じです
(特にスラッシュのエスケープとか)

Dim strOrg as Sting
Dim strNew as Sting

strOrg = ※文章を代入

With CreateObject("VBScript.RegExp")
.Pattern = "http:////.*$"
.IgnoreCase = True
.Global = True
strNew = .Relpace(strOrg, "")
End With

66デフォルトの名無しさん (ワッチョイ dbaa-nhGI)2017/09/09(土) 09:08:52.36ID:ioyoiZXd0
コンパイルエラー:subまたはfunctionが定義されていませんと出ます。
Callされる関数の引数に問題があるのかと思うのですが、原因が分かりません。

Call ShowInIE(ie, "http://www.vba-ie.net/", , 0, 0, 700, 200)

Sub ShowInIE(ie As InternetExplorer,
url As String,
Optional viewFlg = True,
top As Integer,
left As Integer,
width As Integer,
height As Integer)
を設定して渡すで良いのでしょうか?

http://pastebin.com/aJLAUnfc

67デフォルトの名無しさん (ワッチョイ 4eaa-b0o9)2017/09/09(土) 09:16:22.62ID:gq9mYezw0
「vba subまたはfunctionが定義されていません」で検索!

68デフォルトの名無しさん (ワッチョイ b7e4-NEns)2017/09/09(土) 10:42:29.03ID:0n3DLxd60
マクロにパスワードかけてたのだが、どうも破られてるらしき兆候があって
ぐぐった結果見つけたこのページの「マクロのパスワードを解除するマクロ」
を試したらほんまに解除できてびっくり
http://neos21.hatenablog.com/entry/2016/09/30/081709

これで破られない対策って誰かご存じないですかね?
自分で根ほり葉ほり動作調べてたら一日かかりそう

69デフォルトの名無しさん (ワッチョイ b7e4-NEns)2017/09/09(土) 10:44:48.94ID:0n3DLxd60
てか破り方誰でもわかるセキュリティなんて何もしてねえのと同じだ
目からウ●コが落ちた

70デフォルトの名無しさん (ワッチョイ e36f-xkdj)2017/09/09(土) 11:26:51.38ID:KlPTpWTP0
標準モジュール

71デフォルトの名無しさん (エーイモ SE5a-r+B6)2017/09/09(土) 12:21:56.16ID:JuaBWqmdE
>>66
・1行の文を途中で改行する際の末尾アンダーバー( _ )を付け忘れている。
・Optional を付けたらそれ以降の引数もすべてOptional じゃないといけない

72デフォルトの名無しさん (ワッチョイ dbaa-nhGI)2017/09/09(土) 13:21:02.45ID:ioyoiZXd0
>>71
ありがとうございます。出来ました。

73デフォルトの名無しさん (ワッチョイ b66d-YFDC)2017/09/09(土) 13:32:44.29ID:eNyHA1sg0
>>68
ない
MSですら公式に「間違って変更しないためのパスワードであり、セキュリティ云々ではない」と言ってる
ソースはどっか行った

74デフォルトの名無しさん (ワッチョイ b7e4-NEns)2017/09/09(土) 13:49:29.47ID:0n3DLxd60
「ない」ってあんたそんなズバリと(^ ^;

APIのエキスパートなら自分でどうとでもするだろうけど
人に聞いて知ってるような方法はないってことですね
しょーがないか

75デフォルトの名無しさん (ササクッテロル Sp3b-6vZA)2017/09/09(土) 14:33:51.65ID:OsDiJ+6Ap
>>68
パスワードの文字数を多くするとか
記号を使うとか文字の種類を多くする

76デフォルトの名無しさん (ワッチョイ b7e4-NEns)2017/09/09(土) 14:42:58.59ID:0n3DLxd60
そういう問題じゃないんで・・
パスワードを解析するんじゃなく、記録してるとこからそれ自体引っ張り出して
解除させちゃうマクロらしいから、パスワードの複雑さ関係がないんで

77デフォルトの名無しさん (ワッチョイ ff1e-uK4n)2017/09/09(土) 15:11:07.11ID:5iFRXle+0
まず使い方が間違ってる

Excelのパスワードの目的は秘密を守るためじゃなくて、
素人がマクロやシートをうっかり改変して業務に支障を来すのを防ぐのが目的と言われてる

簡単に破れる方法であっても、意図的な操作がなければ破られることはないんで、目的は達成できている

78デフォルトの名無しさん (ワッチョイ b62a-hnbz)2017/09/09(土) 15:41:57.68ID:F1q2327A0
>>65
ありがとう。やってみる。

79デフォルトの名無しさん (ワッチョイ b7e4-NEns)2017/09/09(土) 16:07:18.45ID:0n3DLxd60
まあパスワードかけるなら出来合いじゃなくて
プログラマのハシクレなら自分でそんくらい作れってことかね
他人をあてにするもんじゃないっすね

80デフォルトの名無しさん (スプッッ Sd5a-HfVo)2017/09/09(土) 16:17:06.10ID:OMWVHBMKd
一体どういう目的でパスワードかけるんだろう。実装をどうしても隠したいとかでなけりゃ破られても構わんだろ。

81デフォルトの名無しさん (アウアウカー Sa43-G+Vk)2017/09/09(土) 17:24:58.63ID:ScenqhoIa
社内で使ってるけど皆が改変して収拾がつかなくなって管理出来なくなるのを防ぐとかだったな。
前に見たパスワード掛けてたとこは。

82デフォルトの名無しさん (ワッチョイ 173d-QyhX)2017/09/09(土) 17:28:22.68ID:uXhmIN/20
MSの公式見解だとパスワードはワークグループを分けて誤操作を防ぐ為のものであって、セキュリティ性は無いとされているね。

一応、VBAはバイナリファイルを読み書き出来るから、自分で暗号化技術調べてAES的な暗号化ファイルとか生成出来るぞ。
でも苦労して実装しても運用する奴らが素人だと暗号化した意味が無くなるから作り損だぞ。

83デフォルトの名無しさん (ブーイモ MMff-kzq+)2017/09/10(日) 03:50:51.77ID:y0QNdkXRM
ソフト名忘れたけどVectorにあるExcelアドインで>>68の手法が失敗するやつあったな

84デフォルトの名無しさん (ワッチョイ 5ab3-R8ON)2017/09/10(日) 05:17:37.27ID:MQQa++S20
>>83
しかし、LibreOfficeのCalcからならあっさり見えてしまうんだな。
見えるからコピペし放題

85デフォルトの名無しさん (ワッチョイ e36f-xkdj)2017/09/10(日) 06:19:08.10ID:8d86nTZB0
運用ルールで勝手にいじるなって言えばいいじゃん

8668 (ワッチョイ b7e4-NEns)2017/09/10(日) 07:28:43.80ID:BQ8Qv0VP0
>>83
ほおそれは興味深いですねえ
探してみます

87デフォルトの名無しさん (ワッチョイ ff1e-uK4n)2017/09/10(日) 08:56:33.56ID:7PCuqjJO0
>>85
そんなんで解決できるなら誰も苦労せんわ
「何もやってないのに勝手におかしくなった」は聞き飽きた

88デフォルトの名無しさん (ワッチョイ b66d-AjbO)2017/09/10(日) 09:11:12.77ID:emM90UQN0
「何もやってないのに勝手におかしくなった」
これ一番イラッと来るよな

「パソコンが壊れたー(フリーズしてるだけ)」
とか。

89デフォルトの名無しさん (スプッッ Sd5a-HfVo)2017/09/10(日) 09:12:05.85ID:ZhpxeaJkd
「改変したい点がある。自分でやるのでパスワードを教えてください。」と
直球で要望が来たらどうするの?

90デフォルトの名無しさん (アウアウカー Sa43-8cOM)2017/09/10(日) 09:17:02.60ID:WLChtAtMa
>>89
修正履歴書いて残せばいい

91デフォルトの名無しさん (アウアウカー Sa43-8cOM)2017/09/10(日) 09:21:21.87ID:WLChtAtMa
チーム開発でも修正ルールがあるし
会社のシステムを書き換えるには上司の許可いるだろ

92デフォルトの名無しさん (ワッチョイ 9a11-Qch9)2017/09/10(日) 09:25:28.85ID:Gppr5zJi0
>>89
そいつ用にパスワード外して送ればいいんじゃね
もちろん改変後の質問は受けない

93デフォルトの名無しさん (ワッチョイ ff1e-uK4n)2017/09/10(日) 09:31:38.83ID:7PCuqjJO0
>>89
普通の会社では許可しない
規定のフォーマットで要望書をシステム課に出せ

94デフォルトの名無しさん (ワッチョイ b66d-AjbO)2017/09/10(日) 09:51:20.19ID:emM90UQN0
>>91
vbaには無い。
こういうのは一般事務の女の子向けに男がヘラヘラ書いたもの、ってかvbaが安易に書き換えられる仕様は常識

会社の基幹システムはもちろん無理だけどね
変更許可は絶対に降りない。然るべき手続きが必要

95デフォルトの名無しさん (ワッチョイ ff1e-uK4n)2017/09/10(日) 10:26:56.59ID:7PCuqjJO0
>>94
基幹に近い所でVBAが動いてるうちの会社みたいなところもあるんやで
一部上場でテレビCMもガンガン流してて誰でも知ってる大企業

入力ミスをなくすためにワークシートにロックかけて入力から印刷までフォームなしのVBAで組んである
モッサリでめっちゃ使いにくいシステムで見積書とか作らされてる
下っ端の俺にはどうしようもない

96デフォルトの名無しさん (ワッチョイ b66d-VF3S)2017/09/10(日) 10:31:20.17ID:emM90UQN0
>>95
世間知らずでスマンかった…
ご愁傷様なのだ

97デフォルトの名無しさん (アウアウカー Sa43-8cOM)2017/09/10(日) 11:32:55.83ID:fMXB0jq4a
売り上げ金額が合わなかったので勝手に書き換えておきましたとかやってんのか?

98デフォルトの名無しさん (アウアウカー Sa43-8cOM)2017/09/10(日) 11:38:17.51ID:fMXB0jq4a
知らない人がいつの間にか勝手に書き換えてましたじゃ駄目だろ

99デフォルトの名無しさん (ワッチョイ 2b0f-5bTS)2017/09/10(日) 11:39:01.10ID:FH1GYxFV0
>>96
アライさんおつw

100デフォルトの名無しさん (ワッチョイ b66d-wiQm)2017/09/10(日) 11:49:00.36ID:emM90UQN0
>>97
それ現場、現場の人間はマクロを触る能力なんかない
現場では調整用貯金箱とか作って、金が多かった日は貯金、少なかった日はそこから取り崩しとかやる

101デフォルトの名無しさん (アウアウカー Sa43-G+Vk)2017/09/10(日) 12:47:48.18ID:4u5v5mfoa
後は、客はパスワード解除しないだろう、出来ないだろうという前提でパスワード掛けてたことも有ったな。
客の別の部署の奴がプログラムの仕組みが見れては困るという要望に対して。

そういう案件の場合はExcelでやらずにちゃんとシステム組むべきという俺の指摘は営業的事情により却下されたな。
客がそんなに金使いたく無いんだとよ。

102デフォルトの名無しさん (アウアウカー Sa43-G+Vk)2017/09/10(日) 12:54:29.64ID:4u5v5mfoa
>>94
それやって収拾がつかなくなって、ちゃんと管理しましょうという話になってパスワード掛けることになる。

103デフォルトの名無しさん (ワッチョイ 0b11-p4X9)2017/09/10(日) 13:27:08.19ID:y19mgzO60
Range("J5:J12").Value = "AVERAGE (RC[-7]:RC[-2])"

これどういう意味ですか?

104デフォルトの名無しさん (ワッチョイ 0b11-p4X9)2017/09/10(日) 13:28:56.73ID:y19mgzO60
>>103
これの右辺が分からないです

105デフォルトの名無しさん (ワッチョイ dbe3-otRg)2017/09/10(日) 14:00:23.18ID:co+DcanR0
エクセルVBAの課題ですが分かりません。
Dim Target As Range
Dim temp As String

For Each Target In Range("C2:C6")
'セルの値をすべて全角に置換して変数tempに代入する。変換する文字列は、Valueプロパティを使って取得する
temp = StrConv(Target.Value, vbUpperCase) ←
'置換後の値の全角スペースを半角スペースに変換し、元のセルに入力する
Range("C2:C6") = temp  ←
Next
End Sub
元の値は半角カタカナで別の名前が各セルの記入されています。
矢印の個所が参考書を元に記述しました。

106デフォルトの名無しさん (アークセー Sx3b-zX58)2017/09/10(日) 14:06:44.63ID:iMMEfei9x
>>105
の文章がワカランカ

10768 (ワッチョイ b7e4-NEns)2017/09/10(日) 14:26:35.95ID:BQ8Qv0VP0
>>83
ツールあったから結局買いました
情報ありがとう
http://conex-office-password.com/shopdetail/001000000001/
もし駄目でもどうせ1000円だからな

108デフォルトの名無しさん (アウアウカー Sa43-G+Vk)2017/09/10(日) 14:49:33.57ID:ECkhuLxaa
>>107
これな。
仕組みが想像できる。

109デフォルトの名無しさん (ワッチョイ b66d-Jt/Q)2017/09/10(日) 15:03:50.97ID:emM90UQN0
>>103
こうじゃないの?
Range("J5:J12").FormulaR1C1 = "=AVERAGE(RC[-7]:RC[-2])"
範囲上のセルに数式を入力する

110デフォルトの名無しさん (ワッチョイ b66d-Jt/Q)2017/09/10(日) 15:06:41.55ID:emM90UQN0
>>105
何が分からんのか具体的に

後多分コードが間違っている
Sub a()
For Each target In Range("C2:C6")
'セルの値をすべて全角に置換して変数tempに代入する。変換する文字列は、Valueプロパティを使って取得する
temp = StrConv(target.Value, vbUpperCase)
'置換後の値の全角スペースを半角スペースに変換し、元のセルに入力する
target.Value = temp
Next
End Sub

111デフォルトの名無しさん (ワッチョイ ff1e-uK4n)2017/09/10(日) 15:15:05.13ID:7PCuqjJO0
>>104
右辺は単なる文字列です
セルにそういう「数式みたいな」文字列が入るだけ

112デフォルトの名無しさん (アウアウカー Sa43-G+Vk)2017/09/10(日) 15:15:26.00ID:lVUuTaKfa
というか、どうしても解除されたくなかったらxllアドインとかにすべきでしょ。

113デフォルトの名無しさん (ワッチョイ ff86-8cOM)2017/09/10(日) 16:45:46.81ID:ciO3Bw990
>>100
それ持ち逃げしてもばれないよね

114デフォルトの名無しさん (ワッチョイ 5ab3-R8ON)2017/09/10(日) 17:52:32.57ID:MQQa++S20
>>107
ああ、それ俺も買ったけど良かったよ。VBEを開こうとすると途端にエラーが出るので
大抵は諦めるね。俺はそれに加えてvbeのフォントを白にして嫁ないようにした。

115デフォルトの名無しさん (ワッチョイ 0b11-r1nS)2017/09/10(日) 22:09:00.85ID:R8jGf7t60
>>105
何がわからないのか全然わからない
そのソースコードを実行するとどうなるのか、期待値は何なのか書かないと

まあ、ひとまず temp を配列にしないとダメじゃない?

Dim temp() As String
Dim i As Integer

Redim temp(Range("C2:C6").Rows.Count)

i=0
For Each Target In Range("C2:C6")

temp(i) = StrConv(Target.Value, vbUpperCase)
i = i + 1

Next

Range("C2:C6") = temp

116デフォルトの名無しさん (ワッチョイ 17e4-60Gy)2017/09/11(月) 01:14:13.54ID:cJ5w3XMz0
>>115
1セルずつループして処理すればtempを配列にする必要なんてない

どうでもいいけど、全角はvbWideじゃないのかね
全角スペースを半角にするのはReplaceあたり使えば良いんじゃね
課題ならその課題出した奴に聞けよと思うが

117デフォルトの名無しさん (ドコグロ MM92-Qch9)2017/09/11(月) 07:33:49.76ID:/uQ7pno7M
>>115
速度稼ぐために配列にしてるなら読み出し側もやるべき

118デフォルトの名無しさん (ササクッテロレ Sp3b-kWVg)2017/09/11(月) 07:48:20.80ID:y+HHQfcAp
>>116-117
うん
送信押して、あっと思った
しかも縦方向だと2次元配列じゃないとだめだったっけ?

>>105
ごめん
多分>>110が正解

課題と質問の意図がよくわからないけど

119デフォルトの名無しさん (スププ Sdba-m+++)2017/09/11(月) 08:13:17.53ID:ngQru/Z5d
>>105
矢印の業務が空行の状態が問題文、矢印の行は君が書いた、と解釈した。

矢印1行目は、vbuppercaseじゃなくて、vbwide。uppercaseは大文字だ。
2行目は、target=temp

そういう問題じゃないようだが、高速化するなら、
Rangeを配列に代入
配列内で計算
配列をrangeに書き戻し
する。

120デフォルトの名無しさん (スププ Sdba-m+++)2017/09/11(月) 08:14:49.10ID:ngQru/Z5d
>>119
(誤)矢印の業務
(正)矢印の行
スマン

121デフォルトの名無しさん (ワッチョイ 17e4-60Gy)2017/09/11(月) 15:42:49.07ID:cJ5w3XMz0
なんで君らは
>置換後の値の全角スペースを半角スペースに変換し
は放置なの?

122デフォルトの名無しさん (スププ Sdba-m+++)2017/09/11(月) 20:27:23.15ID:X8qu52Lad
>>121
質問の仕方が悪いから、だな。

では>>119の2行目を
target=replace(temp, "◻︎", " ")
# ◻︎は全角スペースと読んでくれ
に変更。

123デフォルトの名無しさん (ワッチョイ e36f-xkdj)2017/09/12(火) 02:00:32.49ID:qJTGUifI0
target=replace(temp, "全角スペースと読んでくれ", " ")

124デフォルトの名無しさん (ワッチョイ 23ea-hBAF)2017/09/12(火) 23:06:27.96ID:cxYAECV80
3万行前後ある列のデータの隣セルに、別シート5000行前後の列から、if条件に該当したものをループで貼り付ける処理をしているけど処理が遅い
3万行の列が外側ループi、5000行の列が内側ループjで回してる
処理時間短縮の為に、最初にiとjのデータを配列で取得して比較を行い
該当するものをセルに出力するように変更した結果、配列使用前より処理時間が短くなった
もっと処理時間を早くするにはどうすればいいかお知恵をください

125デフォルトの名無しさん (アークセー Sx3b-zX58)2017/09/12(火) 23:14:30.57ID:e4D1CdNrx
>>124
5000がユニークデータなら
コレクション

126デフォルトの名無しさん (ワッチョイ db8f-m+++)2017/09/12(火) 23:23:18.75ID:hrwgqvSF0
>>124
別シート5000をディクショナリーに放り込んで、引いてくれば良いんでない?その手の話で高速化したいなら二重ループはナンセンス。

127デフォルトの名無しさん (ワッチョイ 173d-QyhX)2017/09/12(火) 23:27:05.41ID:aYCmToqI0
>>124
条件と出力形式が分からないからハッキリとは言えないけど、
もし該当したものを都度吐き出しているなら、結果自体を配列にして最後に吐き出す様に直すと早くなるはず。

128デフォルトの名無しさん (ワッチョイ 5a11-oWo5)2017/09/13(水) 00:11:27.19ID:n1InxPaY0
>>124
ここに載ってるDOUBLE TRUE VLOOKUPを試してみてよ
lookupの時間だけ比較してもDictionaryより速いらしいんだが
http://analystcave.com/excel-vlookup-vs-index-match-vs-sql-performance/

アルゴリズムだけ考えたらバイナリサーチより
ハッシュテーブルのほうが速そうなもんだけどな

129デフォルトの名無しさん (ワッチョイ 23ea-xkdj)2017/09/13(水) 00:31:34.36ID:TkE7wJHp0
>>125-126
ありがとうございます!
なるほど、コレクションかディクショナリーで連想配列を使用すれば早いってことか
イマイチ使い方が分からず使用していなかった
大量にデータを処理する場合は活用すれば、処理が早くなる可能性があるって事なんですね
今後は意識して使わせていただきます

>>127
ありがとうございます!
今のコードは ifがTrue時にその都度セルに出力するコードです。
if 配列A(i)=配列B(j) then
worksheets(出力先シート)cells(i,出力先列)=配列B(j)
end if

結果自体を配列にするというのこういう処理でいいでしょうか?
結果を取得する配列Cを宣言
if 配列A(i)=配列B(j) then
配列C(i)=配列B(j)
end if
この後の処理は、配列C(i)の値をループでシートに出力する以下の処理でしょうか?
worksheets(出力先シート)cells(i,出力先列)=配列C(i)

>>128
ありがとうございます!
これは普通のキーワードでネットで調べてもヒットした記憶がないワードです
今後に活用させていただきます

130デフォルトの名無しさん (ワッチョイ 17e4-60Gy)2017/09/13(水) 00:32:10.56ID:/gH6Ji+W0
ハッシュテーブルはハッシュの算出方法で変わるからな
対象データに対して衝突が少なくて計算の軽いハッシュ関数じゃないと

131デフォルトの名無しさん (ワッチョイ 173d-QyhX)2017/09/13(水) 00:58:34.20ID:SpyxPvDF0
>>129
配列とセルは相互に直接的なやりとりが出来るんで調べてみて。
いちいちループ回さなくていいから。

簡単に言えば

Dim A As Variant
A = Range(範囲).Cells

とすれば配列Aに範囲の中身が入り、

Range(範囲) = A

とすれば配列Aの中身が範囲に入る。

132デフォルトの名無しさん (スプッッ Sd5a-cc0f)2017/09/13(水) 07:30:42.98ID:F7IQARkod
ネットでエクセルVBAを勉強中なんですがオススメ参考本とかないでか?
特にユーザーフォームを使って作業が多いです。

133デフォルトの名無しさん (ササクッテロレ Sp3b-kWVg)2017/09/13(水) 07:35:00.26ID:W36Ef0cBp
>>124
条件の内容にもよるけど、ワークシート関数のvlookupは使えないの?

134デフォルトの名無しさん (スププ Sdba-m+++)2017/09/13(水) 08:14:57.58ID:6syv7XXEd
>>133
横からすまん。試してみりゃいいんだろうけど...
vlookup(ワークシート関数)って、マクロから使うメリットがあるほど速いの?

135デフォルトの名無しさん (ワッチョイ a773-a2m6)2017/09/13(水) 08:26:49.86ID:B5ndS4Fj0
お前VBAスレの自称初心者だろW

136デフォルトの名無しさん (ワッチョイ b66d-x/0H)2017/09/13(水) 08:46:51.19ID:ldXoybWh0
>>134
試せよw

って言いたけど昔試験したから教えるわ
実はvlookupは参照範囲を広くしなければかなり早い
ただ2003の頃の話だから、今はどうかしらん

137107 (ワッチョイ 8a2e-NEns)2017/09/13(水) 09:25:03.74ID:C9n8lcte0
たかがソフト買うのに個人情報を洗いざらい要求してくるセキュリティ企業って・・・
なんで俺の住所や電話番号がいるんだよ。なんに使う気だ

しかもダウンロードしようとしたら送ってきたパスワード
そっくりコピペなのにエラー出るじゃねえか
大丈夫かここ

138デフォルトの名無しさん (ブーイモ MM26-zp6i)2017/09/13(水) 10:51:59.22ID:mbz5MtUcM
会社紹介を見る限りまともじゃなさそう
ツールの中身も海外フォーラムに載ってるソースコピペしてたりしてな

139デフォルトの名無しさん (ワッチョイ 173d-QyhX)2017/09/13(水) 12:27:02.45ID:SpyxPvDF0
標準のワークシート関数ってVBAで作ってある上に、色々な目的に使えるように冗長性があるから、
目的に対して最も効率的な処理方法であるという条件下だと処理時間は必ず

ワークシート関数 ≧ VBAマクロ

が成り立つ。
特にVLookupとかはセル毎に走査してるから共有可能な部分も個別に計算してるんで効率面はお察し。

ただしワークシート関数とほぼ同じ機能をVBAマクロで実装するのが時間の無駄って事もあるので、
マクロ内でワークシート関数を利用するという状況を考えるのは難しくない。

140デフォルトの名無しさん (スププ Sdba-m+++)2017/09/13(水) 12:34:53.43ID:Uwuz4mw5d
>>136
ありがとう。

なんか>>139の言う(汎用|冗長)性による低速処理の懸念があって、あまりワークシート関数を使う事考えないんだよね。

141デフォルトの名無しさん (オッペケ Sr3b-Sbom)2017/09/13(水) 12:45:19.24ID:W3E85BX/r
お前らが書いた腐ったvbaコードよりワークシート関数が遅いとかw
どんだけ頭がお花畑なんだよw

142デフォルトの名無しさん (ワッチョイ 5f67-liDa)2017/09/13(水) 13:09:42.32ID:Prl309L10
ワークシート関数は条件さえ整えばマルチスレッドで動くぞ
確実にVBAより早いわ

143デフォルトの名無しさん (ワッチョイ 173d-QyhX)2017/09/13(水) 13:55:24.11ID:SpyxPvDF0
https://msdn.microsoft.com/ja-jp/library/office/bb687899.aspx

公式ページ↑見ると2007からマルチスレッディングになってるらしいけど、
経験上、同じ様な目的の実装で処理時間が

VBAマクロ > ワークシート関数

になった事がないんだよな。

十分に最適化されたVBAマクロよりもワークシート関数の方が処理が早くなるって状況の具体例があれば参考になるんだけど、
そもそも目的が違うのもあってワークシート関数が重いからユーザー定義関数を作りましょうみたいなページしか見当たらない。

144デフォルトの名無しさん (スププ Sdba-m+++)2017/09/13(水) 14:13:42.05ID:/h+OIrtOd
>>141,142
例えば、>>124の質問内容を試しに書いて動かしてみたら、90msecで終わった。これを「vlookup使えばもっと早くなる」と言われても、「別にこれ以上早くなくていいし」って感じ。

145デフォルトの名無しさん (ササクッテロレ Sp3b-kWVg)2017/09/13(水) 14:20:51.63ID:W36Ef0cBp
例えばこんな感じ?

Dim Temp (30000,1)

For i=0 To 30000

Temp(i,1)=Application.WorkSheetFunction.Vlookup(Sheet1.Cells(i,1),Sheet2.Range("A:A"),1,False)

Next

Sheet1.Range("B1:B30000)=Temp


10000×1000で試してみたけど、>>131を二重ループで回した場合5秒かかってたところが、 このvlookupは1秒でできた。

ちなみにExcel2002(職場のクソマシン)だから、また今は違うのかもしれないけど。

146デフォルトの名無しさん (ササクッテロレ Sp3b-kWVg)2017/09/13(水) 14:23:19.54ID:W36Ef0cBp
FORのところ i=1 だね
手打ちなんで許して

147デフォルトの名無しさん (ワッチョイ 173d-QyhX)2017/09/13(水) 14:53:37.84ID:SpyxPvDF0
>>145
うーん、

Sub test1()
Dim Temp(1 To 30000, 1 To 1)

For i = 1 To 30000
Temp(i, 1) = WorksheetFunction.VLookup(Worksheets(1).Cells(i, 1), Sheet2.Range("A:A"), 1, False)
Next

Worksheets(1).Range("B1:B30000") = Temp
End Sub

Sub test2()
Dim d As Dictionary: Set d = New Dictionary

b = Sheet2.Range("A1:A5000").Value
For Each c In b
If Not d.Exists(c) Then d.Add c, c
Next

a = Sheet1.Range("A1:B30000").Value
For i = 1 To 30000
If d.Exists(a(i, 1)) Then a(i, 2) = d(a(i, 1))
Next

Sheet1.Range("A1:B30000") = a
End Sub

この二つだとtest2の方が早い。といっても数字を周期的に並べただけだし、test1の方はヒットしない数字があるとエラー吐く。
もっとフェアなデータでやれば話は違ってくるかもしれないけど、この例だとワークシート関数の方が遅いね。

148デフォルトの名無しさん (ワッチョイ 5a11-oWo5)2017/09/13(水) 15:46:41.67ID:n1InxPaY0
おまえら>>128にパフォーマンステストの結果が載ってるのになぜ見ない

[lookupテーブル件数:200k, lookup回数:25kの結果]
- VLOOKUP: 11.97sec
- VBA Dictionary: 0.45sec (※Dictionaryの生成時間は含まない)
- DOUBLE TRUE VLOOKUP: 0.05sec

VLOOKUPで最後のオプションをFALSEにするとリニアサーチだから遅い
TRUEにするとバイナリサーチだから速い O(N)とO(log N)の違い
ただ見つからない場合に不都合が出るからそれを解決するためのDOUBLE TRUE VLOOKUP
同じリニアサーチでもVLOOKUPが単純な二重ループより数倍速いのはC/C++使って最適化してるから

149デフォルトの名無しさん (ササクッテロレ Sp3b-kWVg)2017/09/13(水) 15:47:56.64ID:W36Ef0cBp
>>147
なるほどー
これは速い
勉強になった

>>124
余談だけど、こんなやり方もどうぞ
コード量は少なさなら一番
速度は>>147の方が速かったけど

Range("A1:A30000")="vlookup(Sheet!A1,Sheet2!A:A,1,false"
Range("A1:A30000").value=Range("A1:A30000").value

2行目は式を消してる

150デフォルトの名無しさん (ササクッテロレ Sp3b-kWVg)2017/09/13(水) 15:50:55.04ID:W36Ef0cBp
>>149
ごめん、いろいろとおかしかった

Range("B1:B30000")="vlookup(Sheet1!A1,Sheet2!A:A,1,false"
Range("B1:B30000").value=Range("B1:B30000").value

151デフォルトの名無しさん (ササクッテロレ Sp3b-kWVg)2017/09/13(水) 16:03:25.39ID:W36Ef0cBp
ほんとグダグダで申し訳ない
しばらくROMります…

Range("B1:B30000")="=vlookup(Sheet1!A1,Sheet2!A:A,1,false"
Range("B1:B30000").value=Range("B1:B30000").value

152デフォルトの名無しさん (ワッチョイ db8f-m+++)2017/09/13(水) 23:54:00.93ID:qFUPeADD0
>>147
あー
> b = Sheet2.Range("A1:A5000").Value
でvalue(のみ)を配列につっこめるんか、あー

ありがとう(・ω・)ノ

153デフォルトの名無しさん (ワッチョイ 81ea-SGtB)2017/09/14(木) 00:05:19.65ID:QvPDzzeD0
>>124で処理時間高速化の質問させてもらった者です

>>131
ありがとうございます!
このスレの内容にあるようにセルを配列に入れてから、if文は配列同士で比較して、結果も配列で取得するように修正しました
配列の値を、一度にセル範囲に出力するコードに修正したら8分前後かかっていた処理が、1分〜2分前後になって、処理時間がめちゃめちゃ早くなって快適になりました

みなさんが言われてるように、VBAでワークシート関数を使用した場合の処理時間は、
おなじみオフィス田中さんのページに、配列をセル範囲に出力するのと同じぐらいの処理時間が高速だと書いてありますね
3万行と比較する列データが、複数シートで複数列だったので、次回同じような処理を作成する時は
VLOOKUP用の一時シートを追加して、3万行の列を一番左の列の検索キーにして、比較列はVLOOKUPで取得する実装をしてみます

154デフォルトの名無しさん (スププ Sdb3-YAaM)2017/09/14(木) 08:15:22.18ID:l8z8iklHd
>>153
分単位はかかり過ぎだと思うなぁ。
データや環境の違いがあるから、純粋に比較はできんだろうが、124の内容を素直に読んでコード書いて動かして見たが、100msecかからんかったよ。
ちな、
3万行のデータを配列1に丸ごと代入
5千行のデータを配列2に丸ごと代入
配列2から辞書を作成
配列1を先頭から順に見て、辞書に存在しない値を消す
3万行データの隣に配列1を丸ごと貼る

155デフォルトの名無しさん (ワッチョイ 7973-sgiV)2017/09/14(木) 08:29:32.22ID:+i9FPPOB0
配列にして一括で読み書きする
これが全てだよ

156デフォルトの名無しさん (スップ Sdf3-GtKF)2017/09/14(木) 10:18:54.39ID:dILqaQ/Ld
VBAにも新規参入者がいて20年くらい前の話題が新たになされるのにちょっと感動した

157デフォルトの名無しさん (ワッチョイ c91e-Gbox)2017/09/14(木) 11:15:17.22ID:XfGri2Pk0
Windows10のアップデートでIEオブジェクトの挙動がまた変わったらしい?
データ収集とかしてる人はアップデートしない方がいいかも

158デフォルトの名無しさん (ワッチョイ 016f-SGtB)2017/09/14(木) 12:34:44.93ID:MnqZaJ520
配列 オブ カリビアン

159デフォルトの名無しさん (スップ Sdf3-GtKF)2017/09/14(木) 12:36:58.88ID:dILqaQ/Ld
この期にIEオブジェクトをわざわさ生成するやり方はやめたらいいと思う

160デフォルトの名無しさん (ワッチョイ 5b6d-M8tZ)2017/09/14(木) 12:39:57.29ID:IwoZ7QGd0
vbaでスクレイピングはねぇ

161デフォルトの名無しさん (アウアウカー Sa1d-+tv6)2017/09/14(木) 12:42:41.16ID:YtbuHggLa
>>157
EdgeではなくIEの挙動が変わったのか?
にわかには信じかたいが。

162デフォルトの名無しさん (ワッチョイ db23-p+ov)2017/09/14(木) 14:27:44.29ID:gZf88W9A0
あるシートに所属するプロシージャから
自分の所属するシートを参照するにはどうしたらいいのでしょうか?
プロシージャを他のシートにコピペしたら
コードを書き換えなくてもコピペ先のシートを参照するようなコードを
書きたいのですが

163デフォルトの名無しさん (ワッチョイ 993d-XDX8)2017/09/14(木) 14:33:45.54ID:EP6SpHBt0
>>162
シートモジュールは、その中で完結する処理を書く場所なので、
シートを飛び越えた処理を行いたいなら標準モジュールに書くべき。

164デフォルトの名無しさん (ワッチョイ db23-p+ov)2017/09/14(木) 14:54:53.92ID:gZf88W9A0
>>163
いや、むしろシートを飛び越えないでほしいんですが
シートで完結した処理にしたいのでシート名や番号による
シートの指定を排除して、所属するシートのセルを参照したいのですが
検索して調べるとセルを参照する方法としては
シート名を決め打ちする方法ばかりが出てくるので困っているのです

165デフォルトの名無しさん (バットンキン MMd3-u5aB)2017/09/14(木) 15:38:59.34ID:lm5VBVU0M
Active Sheet とSheet名以外でSheet 特定できるんだっけ?

166デフォルトの名無しさん (ワッチョイ 7973-sgiV)2017/09/14(木) 15:49:13.64ID:+i9FPPOB0
application.callerでチェックボックスの動きの判定をするようにしたらメチャ重いんだが、これなんとかならない?

167デフォルトの名無しさん (ワッチョイ 5b6d-TkIQ)2017/09/14(木) 15:52:46.83ID:IwoZ7QGd0
>>162
Sub foo()
Debug.Print Me.Name
End Sub

何故かthisworksheetは存在しない
Meを使う

168デフォルトの名無しさん (ワッチョイ 5b6d-TkIQ)2017/09/14(木) 15:53:31.32ID:IwoZ7QGd0
セルはもちろんこんな感じね
Sub foo()
Debug.Print Me.Cells(1, 1)
End Sub

169デフォルトの名無しさん (ワッチョイ 5b6d-TkIQ)2017/09/14(木) 15:54:13.48ID:IwoZ7QGd0
>>166
http://15g.jp/post-314/
これ使っても駄目_

170デフォルトの名無しさん (ワッチョイ 7973-sgiV)2017/09/14(木) 15:57:20.47ID:+i9FPPOB0
>>169
なるほどイベント抑止か。
ありがとう、やってみる

171デフォルトの名無しさん (ワッチョイ 993d-XDX8)2017/09/14(木) 15:58:45.31ID:EP6SpHBt0
>>164
シートモジュールに直書きする場合はSheetsの部分を省略してCellsやRangeから書ける。

シートを指定しない場合の振る舞いが、
標準モジュールではActiveSheet(見えているシート)だったものが、
シートモジュールではそのシートに限定されるという変化をするので併用する場合は注意が必要。

172デフォルトの名無しさん (ワッチョイ 5b6d-TkIQ)2017/09/14(木) 16:00:47.13ID:IwoZ7QGd0
標準モジュールに書いて、対象シートはsetした方がいいと思うけどなぁ

173デフォルトの名無しさん (ワッチョイ db23-p+ov)2017/09/14(木) 16:02:42.23ID:gZf88W9A0
>>167
ありがとうございます。
まさに求めていた回答です。Meとは気づきませんでした。

174デフォルトの名無しさん (アウアウカー Sa1d-+tv6)2017/09/14(木) 18:24:24.22ID:EcWTQGUxa
>>169
うへえ。
確かにそれは効果が高いが、それだけでOKとか、どんだけレベル低いんだ?

むしろ速度を意識したプログラム書いてる奴にとってはそれやっても速度なんて変わらんのだが。

175デフォルトの名無しさん (ワッチョイ 5b6d-UUct)2017/09/14(木) 18:59:59.93ID:IwoZ7QGd0
>>174
ではレベルの高い方法をどうぞ

176デフォルトの名無しさん (アウアウカー Sa1d-+tv6)2017/09/14(木) 19:19:27.73ID:VHoNboqWa
>>175
速度はコードによるから〜でOKなどというものじゃない。
別に、意識してコード書かなくても下記の後半部分にあるようなコードになる。
その上で速度を上げようと意識すれば一番最後のようになる。

http://excel-ubara.com/excelvba4/EXCEL228.html

177デフォルトの名無しさん (アウアウカー Sa1d-+tv6)2017/09/14(木) 19:23:47.78ID:NoiILVtJa
それで駄目ならマルチプロセスにする。
適用出来ないことも多いけどな。
objEx1=CreateObject("Excel.Application")
を複数作ってそれぞれに独立した計算をさせる。

178デフォルトの名無しさん (ワッチョイ 5b6d-UUct)2017/09/14(木) 19:34:05.01ID:IwoZ7QGd0
>>176
ありがとう、ここまで出来るとは思わなかった
他にも関数で高速化極めてて驚いたわ
良いものを見れた

179デフォルトの名無しさん (ワッチョイ 993d-XDX8)2017/09/14(木) 20:04:51.07ID:EP6SpHBt0
シート作ったりセルに書き込んだりというエクセル側の操作をすると、
その度にイベントが走ることになるから、これを如何に抑えるかってのが重要なんだけど、
最初から全部覚えようとするとパンクする。

180デフォルトの名無しさん (ワッチョイ 8123-sgiV)2017/09/14(木) 20:30:17.25ID:8w8A3LKI0
どんだけ頑張ってコード書いても、大量の演算は結局ピボットの方が高速なんだよな

181デフォルトの名無しさん (オイコラミネオ MM6b-mPfK)2017/09/14(木) 22:08:17.65ID:/NzRhjzgM
For i = Lbound(X) to Ubound(X)

a = MATCH関数でXを検証

if XとMATCH関数が一致 Then

For j = Lbound(Z,2) to Ubound(Z,2)

Z(k,j) = cells(a,j-1).value

k = k + 1

next j

end if

Debug.print i

Next i

Xは要素が3万ほど
シートの列数も3万ほどでXと同じ値を格納
シートの列数は50程度

これでDebug.printの表示感覚が1秒ごとくらいなんだけど遅いですか?
30000 * 50 = 150000ループ
実に8時間ほどで納得行かない遅さなんです

182デフォルトの名無しさん (ワッチョイ 5b6d-laG6)2017/09/14(木) 22:14:39.02ID:IwoZ7QGd0
>>181
ファイルを上げてくれないか
実際に試してみないと分からん

183デフォルトの名無しさん (ワッチョイ 993d-XDX8)2017/09/14(木) 22:16:42.03ID:EP6SpHBt0
>>181
そのコードの処理を見る限り、早くする方法はいくらでもあるけど、
処理がくっそ遅いMatch関数使って何かやってるんだから処理速度的にはそんなもんじゃないの。

184デフォルトの名無しさん (ワッチョイ b111-7vJj)2017/09/14(木) 22:18:51.12ID:CAJlFz9z0
何をするプログラムなのか最初に書いてくれないと、どこを観点に見ればいいかわからない

まあ、とにかくRangeを二重ループで触っちゃイカンよ

つーか、>>124と同じ課題か?

185デフォルトの名無しさん (オイコラミネオ MM6b-mPfK)2017/09/14(木) 22:22:13.96ID:/NzRhjzgM
>>182
仕事用なんですいません…

>>183
MATCH関数遅いんですか?
元は3万行のシート回してたけどそれも遅かったんでMATCH関数使ったんですが

186デフォルトの名無しさん (ワッチョイ 993d-XDX8)2017/09/14(木) 22:33:58.37ID:EP6SpHBt0
もしかして学校課題か何かか。三万行って。

187デフォルトの名無しさん (ワッチョイ 1311-T94+)2017/09/14(木) 22:37:11.21ID:XVFgKdZv0
MATCHもmatch_typeに1か-1を指定した時はバイナリサーチだから遅くないよ
0を指定してるとリニアサーチだから件数に比例して遅くなる

188デフォルトの名無しさん (ワッチョイ 118f-YAaM)2017/09/14(木) 23:03:43.05ID:XSiUnmrc0
学校の課題なら手伝わんぞ、それはカンニングだw

189デフォルトの名無しさん (オイコラミネオ MM6b-mPfK)2017/09/14(木) 23:08:26.96ID:6XISNqi7M
>>186
駆け出しのマです

>>187
少ない件数なら激早なんですけど多いと影響あるんですね

仕事だから検証に時間さくわけにもいかないけど納得行かないんですよね
連休に試してみますね

190デフォルトの名無しさん (ワッチョイ 5b6d-A1Wv)2017/09/14(木) 23:20:59.58ID:IwoZ7QGd0
>>189
上司に聞いてみたら?恒久的に超早くなりそうなんで何時間か遊ばせてもらえませんかって
家でも研究中といえば良い
俺が上司なら、ルーチンワークは最優先で効率化させるけどな

191デフォルトの名無しさん (ワッチョイ 118f-YAaM)2017/09/14(木) 23:22:39.03ID:XSiUnmrc0
マ?
クベ??

192デフォルトの名無しさん (ワッチョイ 993d-XDX8)2017/09/14(木) 23:37:20.66ID:EP6SpHBt0
仕事でプログラマやってんなら、それこそ会社に理解があろうがなかろうが検証時間取れないなんて事はないだろう。
どっちにしろ>>124と条件が被ってるんで>>147のtest2を参考に作り直せば速度的にはどうにかなるんじゃないの。

193デフォルトの名無しさん (ワッチョイ 93aa-o7xi)2017/09/15(金) 00:05:39.06ID:N1D7768S0
緑郎?

194デフォルトの名無しさん (ワッチョイ 13b3-e6pT)2017/09/15(金) 05:58:01.90ID:mR9ZEtfo0
駆け出しママ?

195デフォルトの名無しさん (アークセー Sx4d-+IhZ)2017/09/15(金) 12:58:58.26ID:DPkC9aElx
>>172
オブジェクト変数多用は速度低下の一因になるぞ

196デフォルトの名無しさん (ワッチョイ 016f-SGtB)2017/09/15(金) 13:29:55.54ID:+lt7NDiE0
駆け出しのマトリ?

197デフォルトの名無しさん (スプッッ Sdf3-6PtN)2017/09/15(金) 17:41:48.27ID:YuOtTZO+d
表示シートのセルA1に『SD11』と入力してからコマンドボタン1を押したらマスターシートのA列をFINDで検索かけて下に一行ずつ表示シートの項目別にそれぞれ転記するにはどうすればいいですか?
検索まで出きるんですが、転記とループのやり方が分かりません。
Excel VBA 質問スレ Part50 [無断転載禁止]©2ch.net->画像>30枚
Excel VBA 質問スレ Part50 [無断転載禁止]©2ch.net->画像>30枚

198デフォルトの名無しさん (ワッチョイ 993d-XDX8)2017/09/15(金) 19:01:40.44ID:HxJpFmSs0
>>197
たぶんこれ、マスターシート?の一行目が項目になっている事から、
編集→テーブルでテーブル化してフィルタで絞ってコピペした方が早いんじゃないの。

種類の所だけ

Sub foo()
 For Each x In Range("A1:A12")
     if Len(x.Value) Then y = x.Value Else x.Value = y
 Next
End Sub

みたいな形で空白を埋めるようにして。

199デフォルトの名無しさん (ワッチョイ c1f8-7vJj)2017/09/16(土) 07:57:41.80ID:CZKDCudP0
どっちがマスターシートかすらわからないのは俺だけなのか?

200デフォルトの名無しさん (ワッチョイ 016f-SGtB)2017/09/16(土) 08:55:03.94ID:8PfQF6Zm0
動物記を書いた方

201デフォルトの名無しさん (ワッチョイ 5b6d-laG6)2017/09/16(土) 08:57:29.36ID:0Tj0yPF60
それはファーブル

202デフォルトの名無しさん (ワッチョイ 9306-XDX8)2017/09/16(土) 09:10:57.56ID:ZdfhdKJM0
シートンさん、涙

203デフォルトの名無しさん (ワッチョイ 9311-BsvU)2017/09/16(土) 11:39:45.69ID:NmFgsGO20
>>201
父をたずねて三千里の旅に出るよ...


昆虫記

204デフォルトの名無しさん (ササクッテロレ Sp4d-dVTt)2017/09/16(土) 17:35:52.97ID:ZtR64OGap
excel2010使ってます。

apiを使ってアプリケーション外の任意の座標のピクセル情報を監視していますが、視覚的に監視している場所がわからないので、当該場所にbitmapを最前面に描画したいのですが、良い方法はないでしょうか?
あるいは、マウスのカーソルをその位置に描画する。とかも考えています。

205デフォルトの名無しさん (オッペケ Sr4d-Ec1/)2017/09/16(土) 18:35:05.61ID:uv+MHauzr
>>204
愚問だけど
なぜにVBAなんだ?

206デフォルトの名無しさん (ワッチョイ 1311-T94+)2017/09/16(土) 19:17:26.63ID:gf/ZkNkm0
>>204
WIndow作ってWM_PAINTで描画(GDI/GDI+)
Excelで直接やらなくてもいい気がするけど

207デフォルトの名無しさん (アウアウカー Sa1d-+tv6)2017/09/16(土) 21:10:59.05ID:XK5pYCg9a
>>206
昔、そういうプログラム書いてたな。
CreateCompatibleDCとか。

GDI+はステータスバーの数字を取得する為に使ったことがある。
よくあるウインドウハンドルから取得する方法やUIAutomation使う方法で取得出来なかったんで直接Bitbltかなんかで描画してるとしか思えなかった時に。

208デフォルトの名無しさん (ワッチョイ 136c-XDX8)2017/09/17(日) 15:05:48.02ID:QbcXsmvT0
vbaでpdfをこのようにバイナリ変換?して仕事で使うサイトにpostしたいのですがどうすれば変換できますか?
Excel VBA 質問スレ Part50 [無断転載禁止]©2ch.net->画像>30枚  (普通のブラウザで送信した際の通信データを出力したもの)
ググった結果出てきたバイナリ変換?は2種類試しましたが↓変換はされるのですが形式が違うのか上手くいきませんでした(文字化けの感じも違いました)

strfilenameにはpdfのフルパスが入ります
Function GetFile2(strFileName As String) As String
Dim strFile As String
Dim nFile
' Grap the file
nFile = FreeFile
' Open strFileName For Binary As #nFile
Open strFileName For Binary As #nFile
strFile = String(LOF(nFile), " ")
Get #nFile, , strFile
Close #nFile
GetFile = strFile
End Function

Function GetFile(strFileName As String) As String
Dim FileContents() As Byte, FileNumber As Integer
ReDim FileContents(FileLen(strFileName) - 1)
FileNumber = FreeFile
Open strFileName For Binary As FileNumber
Get FileNumber, , FileContents
Close FileNumber
GetFile = StrConv(FileContents, vbUnicode)
End Function

209デフォルトの名無しさん (ワッチョイ 1311-T94+)2017/09/17(日) 15:23:31.58ID:EJ9y/eYt0
>>208
pdfは元々バイナリファイル
それをテキストエディタで開けばその画像みたいになる
エディタで開く時のエンコーディングが違えば文字化けの見た目も変わる

postするときになんで変換しないといけないの?

210デフォルトの名無しさん (ワッチョイ 136c-XDX8)2017/09/17(日) 15:37:36.74ID:QbcXsmvT0
>>209
普段のブラウザでpdfを投稿した際のpostデータを解析したらpostしているデータの中でpdfを>>208の画像の形で投稿していたので
excelで投稿する際も自分のpcにあるpdfをテキスト状に?変換してpostするものだと思いました
自分としてもファイルのフルパスだけ指定して投稿できたら楽だとは思うのですが・・・

211デフォルトの名無しさん (ワッチョイ 136c-XDX8)2017/09/17(日) 18:33:42.58ID:QbcXsmvT0
そしてこれが>>208のマクロでpdfを変換してvbaから投稿した時のpostしているデータです
Excel VBA 質問スレ Part50 [無断転載禁止]©2ch.net->画像>30枚
明らかに文字化けの雰囲気が違うこれだと投稿したpdfを開こうとしても「画像データに不足があります」と出てpdfが開けません
postデータは同じツールで表示していますのでvbaでの変換の方法に問題があるのかと思ってます
>>208の画像がこの画像と違ってどういう形式?なのか分かれば調べようもあると思うのですがいかがでしょうか

212デフォルトの名無しさん (ワッチョイ 5b6d-M8tZ)2017/09/17(日) 19:10:29.54ID:qW/WD7mR0
バイナリ変換とか変なことをするからややこしくなっている
データの解析なんてせんでいい
ファイルは素直にファイルのまま扱えばok

http://www.excel.studio-kazu.jp/kw/20140404154224.html
で、ここ見ておもったんだけど、htmlファイル作ってform用意して、submitすればいいだけじゃない?
ファイルが何個もあるとめんどくさいけど

213デフォルトの名無しさん (ワッチョイ 136c-XDX8)2017/09/17(日) 21:01:40.83ID:QbcXsmvT0
>>212
前にそちらのサイトも参考にさせて頂いて、投稿はできたのですがpdfが開けなくて、
送信データももっとひどい文字化けになってしまい諦めてました
Excel VBA 質問スレ Part50 [無断転載禁止]©2ch.net->画像>30枚
unicodeで送信しているのを調整する必要があると書かれていたのですがそれが原因でしょうか・・・

ちなみに自分の使い方としてはそのサイトのようにグループウェアのキャビネットに投稿する形では無く、
仕事で使っているサイトのフォームで投稿する際に添付ファイルとしてpdfを付けるのが目的なのですが
下の方に書いてあるのはSet objIE = CreateObject("Internetexplorer.Application") 的なIEに直接vbaでsubmitさせるメソッドの事でしょうか?

今のところ、投稿する際にプルダウンや入力フォームで様々な値を入力しなければならなくて、
添付ファイルが無い状態での投稿は問題無く行えるようになったのですが
添付ファイルだけはどうにも壊れてしまうというのが現状なので何とかpdfもこのままpostできないかなぁ・・・というのが現状です

説明が下手で申し訳ないのですがどなたかアドバイス頂けたらと思います

214デフォルトの名無しさん (ワッチョイ 11af-6PtN)2017/09/18(月) 11:37:33.30ID:d9P11nJN0
セルB4から始めて、右に8列‘’○‘’を順番に書き込んでからB5に下がってまた8列書き込む。それを10行繰り返すにはどういうコードになります?

215デフォルトの名無しさん (アークセー Sx4d-+IhZ)2017/09/18(月) 12:09:05.81ID:Y2wXgXiBx
>>214
Forで二重ループ
Cells(5, 2)から始めて必要な列数だけ○を書き込む処理を10行分行うだけ

216デフォルトの名無しさん (アークセー Sx4d-+IhZ)2017/09/18(月) 12:10:08.02ID:Y2wXgXiBx
>>215
Cells(5, 2)から始めて→Cells(4, 2)から始めて

217デフォルトの名無しさん (ワッチョイ 2baa-o7xi)2017/09/18(月) 12:28:31.10ID:XMy/3GFW0
ネットワーク上のフォルダにファイルを保存する時、
初回時のみ若干保存に時間がかかります。
一度実行したあとにすぐ実行すると、
既にネットワーク接続が確立しているからなのか、比較的早く保存できます。
保存は普通にsaveasで、UNCパスで保存しているのですが、
この初回保存時に時間がかからずに保存できる方法ないでしょうか。

218デフォルトの名無しさん (スププ Sdb3-YAaM)2017/09/18(月) 12:39:51.48ID:QSt8wYFod
>>214
「セルB4から始めて、右に8列‘’○‘’を順番に書き込んでからB5に下がってまた8列書き込む。それを10行繰り返す」コード。

219デフォルトの名無しさん (ワッチョイ 11af-6PtN)2017/09/18(月) 13:39:45.60ID:d9P11nJN0
>>215
>>218
ありがとうございます。頑張ってやってみます。

220デフォルトの名無しさん (アウアウカー Sa1d-+tv6)2017/09/18(月) 15:00:22.35ID:7Xxpypu9a
>>217
VBAの問題じゃなくてネットワークやSMBプロトコルの問題じゃないかなあ。
或いは名前解決問題も含んでいるとか。

221デフォルトの名無しさん (アウアウカー Sa1d-+tv6)2017/09/18(月) 15:03:30.32ID:7Xxpypu9a
>>219
全部"○"なの?
Range(B4:I13).Value="○"
じゃ駄目なの?

222デフォルトの名無しさん (ワッチョイ 11a3-mPfK)2017/09/18(月) 15:33:37.57ID:iDSQnxIm0
Excel VBA 質問スレ Part50 [無断転載禁止]©2ch.net->画像>30枚

シート2で選択した人の時間データをシート1からシート2の各セルにコピペしたいです

イベントプロシージャで名前変更時にマクロ起動は出来ました
名前検索&シートを跨いだコピペがどうしても出来ないのでご助力下さい

223デフォルトの名無しさん (ワッチョイ 993d-XDX8)2017/09/18(月) 16:32:44.21ID:tGO6qMv20
>>222
Accessでデータ管理してSQLで取り出すのが一番苦労がないと思うんだが。

224デフォルトの名無しさん (ワッチョイ 5b23-o7xi)2017/09/18(月) 17:38:30.84ID:zFeh6Anl0
>>222
普通にVLOOKUPで引っ張ってくれば
マクロは必要ないのではなかろうか。

どうしてもVBAでやりたいなら
WorksheetFunction.Matchで検索してみよう。
シート間コピペはRangeの前にワークシートオブジェクトを指定すればできます。
範囲でやる場合はValueを書かないとだめです。
Worksheets("シート2").Range("*:*").Value = Worksheets("シート1").Range("*:*").Value
実際には決め打ちじゃなくてCellsで検索結果に応じて可変にすればよいでしょう。

225デフォルトの名無しさん (スプッッ Sdf3-6PtN)2017/09/18(月) 18:28:54.10ID:gz3Qfpmld
>>221
実際には別シートの値をみて条件付けてYESなら右に一個ずつ値を引っ張りたいだけです。

226デフォルトの名無しさん (ワッチョイ 11a3-24l8)2017/09/18(月) 20:17:48.27ID:iDSQnxIm0
>>222ですがコピペ記述できました助言ありがとうございました

Sub

Dim ws1 As Worksheet
Dim ws2 As Worksheet
Dim name As String
Dim r As Variant

  Set ws1 = Worksheets("シート1")
  Set ws2 = Worksheets("シート2")
  name = Worksheets("シート2").Range("*").Value
  r = Application.WorksheetFunction.Match(name, Worksheets("シート1").Columns("a"), 0)
  
  Application.ScreenUpdating = False

  ws1.Activate
  ws1.Cells(r, 4).Select
  Selection.Resize(1,6).Select
  Selection.Copy
  ws2.Range("a6:a11").PasteSpecial (xlPasteValues)

  Application.ScreenUpdating = True

End Sub

シート切り替え時の画面ちらつきを消すために見よう見まねでScreenUpdatingを入れました
期待通りの動きをしてくれてますがもっと上手い記述を参考程度に教えていただきたいです

VLOOKUPだと直接セルに入力する場合があってその時困るのでVBAでやってみようと思った次第です
ACCESSは諸事情で使えません

227デフォルトの名無しさん (ワッチョイ 11af-6PtN)2017/09/18(月) 20:45:41.88ID:d9P11nJN0
この小汚いコードなんとかなりませんか?
Excel VBA 質問スレ Part50 [無断転載禁止]©2ch.net->画像>30枚

228デフォルトの名無しさん (ワッチョイ 5b6d-UUct)2017/09/18(月) 20:58:13.91ID:jDUrs+BF0
>>227
まず写真じゃなくてプリントスクリーンで

229デフォルトの名無しさん (ワッチョイ 5b23-o7xi)2017/09/18(月) 21:06:56.54ID:zFeh6Anl0
>>226
たぶんマクロ記録を改造しているんだと思いますが
Select、Activateはする必要なく
転記処理は
ws2.Range("a6:f6").Value = ws1.Range(ws1.Cells(r,4),ws1.Cells(r,9)).Value
この1行だけでいけるはず。
=の右辺と左辺が同じ大きさの範囲である必要あり。
範囲は実際のシートのに書き換えてお試しを。

230デフォルトの名無しさん (ワッチョイ 11af-6PtN)2017/09/18(月) 21:26:16.39ID:d9P11nJN0
>>228
パソコンのネットがゴミ過ぎてパソコンからは書き込めないんです...

231デフォルトの名無しさん (ワッチョイ 5b23-o7xi)2017/09/18(月) 21:38:27.20ID:zFeh6Anl0
>>227
応用シートを変数に突っ込む
WithにRange指定まで突っ込む
RangeをCellsにして列参照を変数にする
オフセットの数値を変数にする
これでループで変数をインクリメントしていけばスッキリしそう。

232デフォルトの名無しさん (ワッチョイ 993d-XDX8)2017/09/18(月) 21:41:20.89ID:tGO6qMv20
>>227
Sub foo()
Str_NowRng = FindRange.Offset(0, 1).Address
Str_ShuName = FindRange.Offset(0, 1).Value
Set 基礎 = Worksheets("基礎")
Set 応用 = Worksheets("応用")
i = 4
Do While Str_ShuName = "A"
For j = 1 To 5
応用.Cells(i, j + 1).Value = 基礎.Range(Str_NowRng).Offset(0, j).Value
If j = 3 Then 応用.Cells(i, j + 1).Value = 応用.Cells(i, j + 1).Value + Val(MSUN)
Next
With 基礎.Range(Str_NowRng).Offset(1, 0)
Str_ShuName = .Value
Str_NowRng = .Address
End With
Loop
End Sub

設計が腐ってる臭いがするので、小手先直したところで意味ないと思うけど。

233デフォルトの名無しさん (ワッチョイ 11a3-mPfK)2017/09/18(月) 21:46:33.83ID:iDSQnxIm0
>>229
うおおおおおお
その1行だけで動きました
ありがとうございます

マクロ記録ではなくググった記述の真似ですが検索が下手だったみたいです

234デフォルトの名無しさん (ワッチョイ 6169-XDX8)2017/09/18(月) 21:49:23.00ID:m1CRg0zL0
userform2のcaptionをそのままuserform8のcaptionに代入使用しています。
型が一致しませんのエラーが出ます。
先ほどまで問題なく動いていたのですが、突然出るようになりました。
UserForm8.Caption = UserForm2.Caption

Dim FormName as string
FormName = UserForm2.Caption
Userform8.Caption = FormName

でもエラーが出てしまいます・・・。

235デフォルトの名無しさん (ワッチョイ 5b6d-A1Wv)2017/09/18(月) 21:59:25.32ID:jDUrs+BF0
>>234
何でそんなことやってるか知らんけど…

標準モジュールに書いたら動いた
Sub foo()
UserForm1.Caption = UserForm2.Caption
End Sub

とりあえずイミディエイトウィンドウやウオッチ士気で、
UserForm2.Caption
に何が入ってるか見てみたら?

236デフォルトの名無しさん (ワッチョイ 11af-6PtN)2017/09/18(月) 22:04:09.39ID:d9P11nJN0
Str_NowRng=FindRange.Offset(0,1).address
Str_ShuName=FindRange.Offset(0,1).Value
With Worksheets(〃基礎〃)
i=4

Do While Str_ShuName=〃A〃
Worksheets(〃応用〃).Range(〃B〃&i).Value=.Range(〃Str_NowRng〃).Offset(0,1).Value
Worksheets(〃応用〃).Range(〃C〃&i).Value=.Range(〃Str_NowRng〃).Offset(0,2).Value
Worksheets(〃応用〃).Range(〃D〃&i).Value=.Range(〃Str_NowRng〃).Offset(0,3).Value+val(MSun).Value
Worksheets(〃応用〃).Range(〃E〃&i).Value=.Range(〃Str_NowRng〃).Offset(0,4).Value
Worksheets(〃応用〃).Range(〃F〃&i).Value=.Range(〃Str_NowRng〃).Offset(0,5).Value

Str_Name=.Range(〃Str_NowRng〃).Offset(1,0).Value
Str_NowRng=Range(Str_NowRng).Offset(1,0).address
i=i+1

Loop

i=14
Do While Str_ShuName=〃B〃
中身同じ
Loop

i=32
Do While Str_ShuName=〃C〃
中身同じ
Loop
こんな感じです。
パソコン見ながら打ったので間違って打ってたらごめんなさい。

237デフォルトの名無しさん (ワッチョイ 5b6d-A1Wv)2017/09/18(月) 22:04:38.56ID:jDUrs+BF0
〃応用〃
なんかかわいい

238デフォルトの名無しさん (ワッチョイ 5b6d-A1Wv)2017/09/18(月) 22:05:45.55ID:jDUrs+BF0
>>236
とりあえず>>232以上の回答はないと思うぞ

239デフォルトの名無しさん (ワッチョイ 11af-6PtN)2017/09/18(月) 22:09:21.04ID:d9P11nJN0
>>232
ありがとうございます。すごい助かります。感謝です!

240デフォルトの名無しさん (ワッチョイ 11af-6PtN)2017/09/18(月) 22:09:42.61ID:d9P11nJN0
>>238
はい。ありがとうございました。

241デフォルトの名無しさん (ワッチョイ 6169-XDX8)2017/09/18(月) 22:09:56.31ID:m1CRg0zL0
>>235 ありがとうございます。 他のユーザーフォームではできましたので、USERFROM8自体がおかしくなっている?
直前にエクセルが動作停止しました。その際に壊れてしまい、USERFORM8のオブジェクト名を理解できていないようです。
そんなことはありますでしょうか?

242デフォルトの名無しさん (ワッチョイ 5b6d-A1Wv)2017/09/18(月) 22:13:12.43ID:jDUrs+BF0
>>241
さーねぇ。まぁあるかないかならあると思うけど、安易に答えは出さないけど、
どうでもいいマクロならさっさとuserform8消して新しく作り直すほうがいいかもな

243デフォルトの名無しさん (JP 0H35-+tv6)2017/09/18(月) 22:25:10.48ID:SpW0zo9eH
>>226
>>229の言う通り

ws1.Activate
ws1.Cells(r, 4).Select
Selection.Resize(1,6).Select
Selection.Copy
ws2.Range("a6:a11").PasteSpecial (xlPasteValues)



ws1.Cells(r, 4).Resize(1,6).Copy
ws2.Range("a6:a11").PasteSpecial xlPasteValues

でOK。
1行ずつ意味を考えて上達して行こう。
ところで、PasteSpecialの後ってカッコ無しでスペースだよね。

244デフォルトの名無しさん (アウアウカー Sa1d-+tv6)2017/09/18(月) 22:34:50.16ID:xepoeGeEa
>>227
インデント統一してる?
俺は4つ(標準)にしてるけど、少しでもズレてる所があると気持ち悪い。
こういうコード貰ったらCtrl + A押して、
Shift + Tabを連続20回ぐらい押してしまう。
んで、全ての行のインデント振り直す。

それから、2つのシート使ってるようだけど自分ならそれぞれを変数に入れるな。
1つはWith使ってるから良いとして、もう1つだけでも変数に入れる。
まあ、自分の場合は基本的にブックから省略しないのでWithや変数に入れないと長くなるんだわ。

それからDo While〜Loopの中だけど、Offsetとiの併用してるのは何で?
全部iで書き直したら?
そうすればStr_ShuNameとかStr_NowRngとか必要無くなるよ。
Str_ShuNameの場所もi使って1つずつ下がって行くんでしょ。
Do Whileの条件もi使って表したらStr_ShuNameへの代入も必要無いよね。

それから、Range("B" & i ).Valueって記述だけど、RangeじゃなくてCells使えば列方向もj使って繰り返しが使えるよね。
まあ、真ん中だけ少し違うから恩恵少ないけど。

245デフォルトの名無しさん (ワッチョイ 5b6d-oZA3)2017/09/18(月) 22:45:05.41ID:jDUrs+BF0
>>244
sublimnetextとか使ってみてはどうだろう
コピペするだけであら不思議、自動インデント
Excel VBA 質問スレ Part50 [無断転載禁止]©2ch.net->画像>30枚

VBEと連携できたら便利なんだけど、残念ながらできない

246デフォルトの名無しさん (アウアウカー Sa1d-+tv6)2017/09/18(月) 23:05:45.45ID:xepoeGeEa
>>245
自動でやるならmougでsmart indenter紹介してたな。
多分連携できるはず。

247デフォルトの名無しさん (ワッチョイ 5b6d-oZA3)2017/09/18(月) 23:28:32.94ID:jDUrs+BF0
>>246
うお、こんな便利なもんあったのか
ありがとう早速試してみる

248デフォルトの名無しさん (ワッチョイ 118f-YAaM)2017/09/18(月) 23:32:57.67ID:2tW0i3mn0
>>221
それはテクニック。質問者は
「セルB4から始めて、右に8列‘’○‘’を順番に書き込んでからB5に下がってまた8列書き込む。それを10行繰り返す」方法を訊いている。

249デフォルトの名無しさん (スップ Sdb3-GtKF)2017/09/19(火) 08:03:42.97ID:S/ELy/wxd
学習指導要領的なアレ

250デフォルトの名無しさん (ワッチョイ b111-7vJj)2017/09/19(火) 08:41:07.80ID:TQtJdwms0
>>248
でも二重ループでセルを回すとか、実際にはやらない、というかむしろやっちゃいけないようなこと質問されてもね

251デフォルトの名無しさん (ワッチョイ 5b6d-jqo8)2017/09/19(火) 09:07:55.93ID:llsJeX6S0
>>250
やっちゃいけないってなんだよw
foreach in rangeって言いたいんだろうけど、excelは行列の削除があるから二重ループでいいだろう
セルじゃなければforeachでいいけどな

252デフォルトの名無しさん (ワッチョイ c91e-Gbox)2017/09/19(火) 11:43:23.74ID:3hwVeuBP0
列数 = 8
行数 = 10
Range("B4").Resize(列数, 行数).Value = "○"

253デフォルトの名無しさん (アウアウカー Sa1d-+tv6)2017/09/19(火) 12:11:26.47ID:JjVbyw/1a
>>248
初心者は設計に問題がある場合が多いわけで。
真面目に回答してもすったもんだして結局>>221が採用されることも多い。
質問の仕方もダメダメな場合が多いから、回答も段々きつくなる。

>>251
すべきじゃ無いのはむしろセル回す方だと思うが。
配列からの一括挿入にすべきだろ。

254デフォルトの名無しさん (オッペケ Sr4d-ZzG1)2017/09/19(火) 12:22:40.32ID:hROBZ5mLr
問題もクソもこういう場合質問者はループを回したいなど微塵も思ってない
無知ゆえに質問の仕方がぎこちないだけだ
教えたがりならそれくらい察しろよ

255デフォルトの名無しさん (スププ Sdb3-YAaM)2017/09/19(火) 12:37:00.77ID:k/2scTwdd
二重ループってのもある種のテクニックだから、そのやり方を訊いているのかも知れん。for nextでカウンタiとjを使って...とか。
そうでないなら、例えば、同様の効果を得る処理時間の短い方法を知りたいなどと訊くべし。

256デフォルトの名無しさん (アウアウカー Sa1d-+tv6)2017/09/19(火) 12:58:00.95ID:JjVbyw/1a
>>254
それを察したから>>221を書いたんだろ。
したら>>248の突っ込みが入って今に至ると。

それと初心者の場合、無知なんじゃ無くて自分で色々試してみるということをしないが故ということも多い。
動く結果を欲しがり、動く仕組みを自分のものにしない。

質問でRange("K15:O20")などと出てくるだけでガッカリ。
その範囲は今問題になってるお前の表そのものだろと。
結局貰ったコードそのままコピペして使うんだろうなと想像ついちまう。

257デフォルトの名無しさん (ワッチョイ 993d-XDX8)2017/09/19(火) 13:16:12.83ID:GpDcdeuu0
「何をどうすればいいのか見当がつかない」というのは根本を理解していないが故だしな。

それにVBAはだいたいネット検索すれば解決策が載ってるんで(凡例が少ないという事はあるけど)、
自分で解決してから「こういう方法以外にどのような解法があるか」と聞いてくるのが一番正常なのかもしれないね。

258デフォルトの名無しさん (スップ Sdb3-GtKF)2017/09/19(火) 14:10:03.77ID:S/ELy/wxd
初心者がいるってことは新規参入者がいるってことなので、考えようによってはありがたいことだ。

259デフォルトの名無しさん (ワッチョイ 398b-MDSF)2017/09/19(火) 21:47:07.38ID:r8s5qxxU0
つべこべ文句言ってねえでお前らなんかに質問してくれるだけ有り難いと思えよ

260デフォルトの名無しさん (スプッッ Sdf3-uHQa)2017/09/19(火) 23:27:39.48ID:44Sr5E9Ld
ここはVBAの作成依頼もOKですか?

261デフォルトの名無しさん (ワッチョイ 5b6d-jqo8)2017/09/19(火) 23:28:15.16ID:llsJeX6S0
>>260
内容による
とりあえず内容書いてみればok

262デフォルトの名無しさん (スプッッ Sdf3-uHQa)2017/09/19(火) 23:38:49.19ID:44Sr5E9Ld
>>261
B2〜B40までのセルをダブルクリックすると検索ボックスが出てきてE2〜E25までのデータを検索出来るようにしたいです(実際のデータは1500個くらいありますが)
検索ボックスにaと入力するとaを含むデータがリスト化されて出てきて、そのリストをダブルクリックするとBの列にそのデータが貼り付けされる
っていうのを作りたいです
Excel VBA 質問スレ Part50 [無断転載禁止]©2ch.net->画像>30枚

263デフォルトの名無しさん (ワッチョイ 118f-YAaM)2017/09/19(火) 23:46:09.19ID:awnco+f70
なんで(R1C1形式じゃなくて)A1形式なんだろうなぁ。あれ(A1形式)って感覚的に分かるの?

264デフォルトの名無しさん (ワッチョイ 398b-ZzG1)2017/09/19(火) 23:54:26.79ID:r8s5qxxU0
バカはいつも突然やってくる

265デフォルトの名無しさん (ワッチョイ 5b6d-jqo8)2017/09/19(火) 23:54:28.98ID:llsJeX6S0
>>262
とりあえず写真じゃなくスクリーンショットで頼む
モアレになって鬱陶しい

要するにE列を文字列で絞り込んでB列に貼り付けたいってことね

で、考えた
・openイベントでuseformをExcelとは別に動くようにshowする。要するに常時表示させる検索ウィンドウ。モーダルか、モーダレスか忘れた。
・テキストボックスに入力するとB列が次々と変化
1500ぐらいならリアルタイムで変化させても余裕だろう

誰も作って無かったら明日の夜作るよ

266デフォルトの名無しさん (ワッチョイ 5b6d-jqo8)2017/09/19(火) 23:55:49.42ID:llsJeX6S0
>>263
分からん。全然分からん。
ただ既存のシートにマクロでclearcontentsする時はA1形式にする事はよくある

267デフォルトの名無しさん (ワッチョイ 993d-XDX8)2017/09/19(火) 23:56:24.26ID:GpDcdeuu0
>>262
GUIいじりはエクセルVBAの守備範囲外だからやめたほうがいい。

リボンを改造して専用のボタンを用意する方法があるので、
そこからフォームを呼び出してツールであるかのように見せるのが限界。

268デフォルトの名無しさん (スプッッ Sdf3-uHQa)2017/09/20(水) 00:01:43.09ID:+p3KI42td
>>265
ありがとうございます
スクショは今は撮れませんが明日できれば撮ります

269デフォルトの名無しさん (ワッチョイ c91e-Gbox)2017/09/20(水) 00:23:48.32ID:mkPuPLWs0
デジカメでモニターを撮影するのだって広義のスクショなんだけど
むしろ初期はカメラをモニターの前に置くしか方法がない場合が大多数だった

270デフォルトの名無しさん (ワッチョイ 993d-XDX8)2017/09/20(水) 00:33:24.59ID:rbLHucI/0
変な作り話しなくても、会社とか学校のPCとかで内部データ持ち出せない場合は、
そういう風にするしかないって擁護すればいいんじゃないの。(その場合でも画面の写真撮るのは拙いけど)

271デフォルトの名無しさん (ワッチョイ 5b6d-+06M)2017/09/20(水) 08:10:47.54ID:pHDT776b0
>>262
出来たわ
テキストボックスに入力するとB列で絞込表示
1500件ぐらいなら多分軽い
https://www.dotup.org/uploda/www.dotup.org1370604.zip.html

272デフォルトの名無しさん (アウアウカー Sa1d-+tv6)2017/09/20(水) 19:48:21.95ID:WlNCuA1ya
>>262
B列のダブルクリックとか設計がよろしくないね。
検索ボックスってのはフォームと推測。
B列への入力ってのは検索したリストの中から選択したものを入力ってことと推測。

以下のようなものを作成してみた。
・[アドイン]リボンの[E列データ作成]を押すとE列に10万行のランダムデータ作成
・[アドイン]リボンの[E列から検索]を押すと検索用フォームを表示
・検索用フォームでテキストボックスに入力してEnterキー押下するとリストボックスに検索結果表示
・リストボックスでダブルクリックするとB列に選択されたセルにダブルクリックした文字列を入力

https://pastebin.com/ye8PZecY

273デフォルトの名無しさん (スプッッ Sdf3-wsdZ)2017/09/20(水) 20:37:33.76ID:JB1iCPlvd
>>265,267,271,272
みなさんありがとうございました
色々コピペですがおかげで何とか出来ました

274デフォルトの名無しさん (ワッチョイ 398b-MDSF)2017/09/20(水) 21:25:43.55ID:6Jeed1fg0
>>272
設計がよろしくないねwwww

しゃしゃんな無能w
おめーの設計()の方がよっぽどよろしくないわw

煽りじゃなくてマジもんのクソだっつーのそのUI
しかもコードは小学生の初めてのプログラミングレベルだぞお前

275デフォルトの名無しさん (アークセー Sx4d-ynyw)2017/09/20(水) 21:37:54.27ID:sWNWre39x
>>274
スゲー承認しました

276デフォルトの名無しさん (スプッッ Sdf3-wsdZ)2017/09/20(水) 22:21:19.53ID:JB1iCPlvd
ちなみにこんなのが出来ました

B5をダブルクリックすると画像のように検索フォームが出て来る
フォームにabと入力してエンター押すとabを含んだリストが出て来る
Excel VBA 質問スレ Part50 [無断転載禁止]©2ch.net->画像>30枚

リストのabdをダブルクリックするとB5にabdが貼り付けされて検索フォームが閉じる
Excel VBA 質問スレ Part50 [無断転載禁止]©2ch.net->画像>30枚

↓を参考にしてみたけどRowSourceに値をセットするっていうのがよくわからなかったから空欄にした
http://infith.com/system/excel/vba_form_find/

VBAというかプログラミング初めてなので勉強になりました
みなさまありがとう

277デフォルトの名無しさん (ワッチョイ 5b6d-laG6)2017/09/20(水) 22:31:46.25ID:pHDT776b0
>>276
乙。よー頑張った
こういう報告は嬉しいもんやね

278デフォルトの名無しさん (アウアウカー Sa1d-+tv6)2017/09/20(水) 23:02:00.90ID:1NkuNAa7a
>>274
初心者の人?
今回の質問自体が簡単な部類だけど、それでも俺の書いたコードが非難されるようなものかどうかも区別つかないの?

批判にも具体的な指摘が全く無いし。

279デフォルトの名無しさん (ワッチョイ 993d-XDX8)2017/09/20(水) 23:22:24.26ID:rbLHucI/0
>>278
以前から居る病気の人だから構わないであげて
VBAのコードが読めないのに何故かこのスレに張り付いてんのよ

280デフォルトの名無しさん (アウアウカー Sa1d-+tv6)2017/09/20(水) 23:30:23.54ID:1NkuNAa7a
>>276
そこのサイトのコードだと毎回下記手順になるんだけどそれでOK?

セルダブルクリック
テキストボックス入力
リストボックスダブルクリック
以下繰り返し

間違って別のセルダブルクリックしたらフォーム閉じなきゃならんし、
連続して入力していくならフォームはモードレスにしてリストボックスのダブルクリックで閉じないようにした方が良い。

セルダブルクリックの中の
frm_Kamoku.Show

frm_Kamoku.Show vbModeless
に変更して
リストボックスダブルクリックの中の
Unload Me
をコメントアウトするだけ。

フォーム表示中にリストボックスダブルクリックで入力するセルが選択できるようになる。
フォームの終了はxボタンで。

281デフォルトの名無しさん (ワッチョイ 398b-MDSF)2017/09/20(水) 23:31:16.68ID:6Jeed1fg0
>>278
初心者の人?wwwwwww

いやw初心者はお前だからw
何をどう勘違いしたらこうもマヌケな発言が出来るのかねw

そもそもお前のクズコードなんぞ批評の土台にすら登っとらんわ
のぼせ上がんのもいい加減にしろクズ

282デフォルトの名無しさん (アウアウカー Sa6b-XzBy)2017/09/21(木) 00:04:37.10ID:OcnLMsdka
>>281
例えばね、>>276のリンク先の人のコ−ドを見ればすぐに、そこそこ書けると分かるのよ。
書ける人ってのはコード見ればその人の力量がすぐ分かるもんなんだ。

>>276のリンク先の人がそこそこ以上かどうかは扱っている内容が初心者向けだから分からないけど一定以上のレベルにあることは分かる。

残念だが、君はとっても恥ずかしい人だ。
というかね、煽るだけで具体的な内容が無い。
どこが悪いか全く言及出来てないのが笑える。

283デフォルトの名無しさん (ワッチョイ 466d-mTZU)2017/09/21(木) 00:07:50.25ID:GdqtYoiF0
こんな華やかなコメントアウトって使う?
'*********:*********:*********:
' このプログラムはaでbです
'*********:*********:*********:

284デフォルトの名無しさん (ワッチョイ 4623-PvnN)2017/09/21(木) 00:11:10.32ID:vjoJajys0
>>276
自分がよく使う、なんちゃってインクリメンタルサーチコードを差し上げよう。
一文字打つごとに検索結果が絞り込まれるよ。
検索ボックスのChangeイベントにコピペしてオブジェクト名は書き換えて試してみてね。
数百件ならラグもないはず。

Private Sub TextBox1_Change()

Dim ce As Range
Dim ws As Worksheet
Set ws = Worksheets("対象シート")

If TextBox1.Text = "" Then Exit Sub

With ListBox1 ’検索結果を表示するリストボックス

.Clear

For Each ce In ws.Range("検索するセル範囲")
If StrConv(UCase(ce.Text), vbNarrow) Like "*" & StrConv(UCase(TextBox1.Text), vbNarrow) & "*" Then
.AddItem ce.Text
End If
Next

End With
End Sub

285デフォルトの名無しさん (アウアウカー Sa6b-XzBy)2017/09/21(木) 00:26:32.97ID:OcnLMsdka
>>283
???
使う人もいるでしょ。
俺も使う時あるし。
こんなのも使うな

' /////////////////////////////////////////////////////////////////////////////////////
' //#名称 Auto_Open
' //
' //#概要 ブックを開いたときの処理(Excelの特殊関数)
' //
' //#引数 なし
' //
' //#戻値 なし
' //
' //#解説
' //
' //#履歴 2017/09/21
' // Coded by Hogeta Hogeo
' //
' /////////////////////////////////////////////////////////////////////////////////////

286デフォルトの名無しさん (アウアウカー Sa6b-XzBy)2017/09/21(木) 00:34:34.85ID:OcnLMsdka
>>276
>>280に書いた内容だけど、よく考えたらB列以外にも入力されちまうわ。
元々の処理ではフォーム表示で入力セル固定だけど>>280では固定じゃ無くすので。

リストボックスダブルクリックの処理でアクティブセルに入力するようになってると思うけど、>>280を試すならアクティブセルの列がBの時だけ入力するようにしないといかんね。

287デフォルトの名無しさん (ワッチョイ af8b-lQLN)2017/09/21(木) 06:16:04.60ID:dREmj5Qv0
>>282
朝から笑わせてもらったw
なぜお前らはそこまで勘違い出来るのか?
勘違いこそが教えたがりクンになれる素養なのか?
大体分かってたけどw

まあお前らが勝手に勘違いしてるだけならいいが
他人に嘘を教えようとしたら盛大に告発させてもらうわw

288デフォルトの名無しさん (ササクッテロレ Spa3-vm6H)2017/09/21(木) 07:36:17.84ID:JiFdzG0np
ここまで具体的な指摘なし

289デフォルトの名無しさん (ワッチョイ 466d-PvnN)2017/09/21(木) 07:48:27.04ID:GdqtYoiF0
>>285
あぁ、そういう風に使うのか、ありがとう

290デフォルトの名無しさん (アークセー Sxa3-7O1h)2017/09/21(木) 08:27:55.66ID:Fp/Plhwox
>>281
スゲー承認しました

291デフォルトの名無しさん (アークセー Sxa3-7O1h)2017/09/21(木) 08:28:32.33ID:Fp/Plhwox
>>287
スゲー承認しました

292デフォルトの名無しさん (アウアウカー Sa6b-XzBy)2017/09/21(木) 17:33:45.86ID:w3PiJp4aa
>>287
どこが悪いのか指摘出来ないというのが苦しいね。
批判出来るということは悪い所がわかるということの筈なんだけどな。
悪い所が分かる程の能力は無いけど、取りあえず煽ってみましたってところかな。

ところで君は自分の書いたコード晒したこと有るのかね?
君が俺より出来るなら>>204に答えてあげなよ。
>>204の質問って、ここでは高度な内容になる筈だからさ。

ま、無理だろうけど。

293デフォルトの名無しさん (スプッッ Sd4a-Ir9i)2017/09/21(木) 17:40:03.03ID:3c3Fmrq2d
>>276です
皆さんありがとうございます
質問なんですが
http://infith.com/system/excel/vba_form_find/
によると
RowSourceに"科目マスタ!A2:A" & wLastGyouを入れないといけなのでしょうか?
プロパティのRowSourceに値を入れようとしてもエラーが出ます

294デフォルトの名無しさん (アウアウカー Sa6b-XzBy)2017/09/21(木) 18:42:41.24ID:w3PiJp4aa
>>293
そもそも、どうしてRowSourceにこだわってんの?
君のやりたいことでは必要無いと思ってたんだが。

RowSourceってのは融通が効かないから自分は基本使わないんだが、エラーになってるとしたらRowSourceとAddItemが共存出来ると思ってるとかかな。
RowSourceはシートの指定範囲のデータをリストにするもので、そこに追加やそこから削除は出来ない。
指定範囲のデータだけでリストは完結することになる。
そこでそのリンク先でも絞り込みの前に.RowSource=""を入れてる。

295デフォルトの名無しさん (アウアウカー Sa6b-XzBy)2017/09/21(木) 18:48:44.67ID:w3PiJp4aa
>>293
RowSourceプロパティに事前に値入れてもエラーにはならんよ。
シート名!A1:A10
とか入れてみなよ。
変数は使えないのは分かるよね。
動く前なんだし。

296デフォルトの名無しさん (ワッチョイ af8b-lQLN)2017/09/21(木) 22:35:38.87ID:dREmj5Qv0
>>292
批判wwwwww

批評の土台にすら登ってないと何度言えばw
自分の無知無能に蓋をして見たいものしか見てないんだよお前らは
勇気を出して一度自分の無能と真剣に向きあってみ?

頭が悪くても少しは世界が変わるから…何も変わらんかもしれんけどなw

297デフォルトの名無しさん (ササクッテロレ Spa3-vm6H)2017/09/21(木) 22:38:43.69ID:JiFdzG0np
依然として具体的な指摘なし

298デフォルトの名無しさん (アウアウカー Sa6b-XzBy)2017/09/21(木) 23:08:08.58ID:u5EL98RNa
>>296
何だ、何も言えるだけの技術的要素を持ってない人か。
具体的な指摘も一切出来ないし、わざわざ>>204の話を振ってやっても何をどうすれば良いかも思い付かないんだろう。

ちなみに俺は3〜4パターンは思い付いてる。
例えば、ビットマップ描画じゃなくても透明ウィンドウに円形リージョン使った輪っかウィンドウ表示するとか。
リージョン使わなくても透明ウィンドウだけで同じようなの作るとか。

ま、何言ってるか分からないだろうけど。

299デフォルトの名無しさん (ワッチョイ af8b-lQLN)2017/09/21(木) 23:45:26.82ID:dREmj5Qv0
>>298
技術的要素wwwwwww

とことん笑わせてくれるなお前w
相手にされてないのに必死にアピールして虚しくならないのかバカという人種はw
これがお前らの大好きな承認欲求ってやつだろw

他人に認められたかったらまず自分の無知無能を自覚しろよ
話はそこからだ、そうすれば少しは周りも認めてくれるんじゃね?

…あ、バカが居る…てなw

300デフォルトの名無しさん (アウアウカー Sa6b-XzBy)2017/09/21(木) 23:55:14.64ID:u5EL98RNa
>>299
小学生でもお前のレベルは低いと言うことは出来る。
本当に自分の方がレベルが上かを示さなくて良いならな。

それがお前だ。
技術的要素無しであの葡萄は酸っぱいと言ってるキツネのようだ。

301デフォルトの名無しさん (アウアウカー Sa6b-XzBy)2017/09/21(木) 23:57:08.45ID:u5EL98RNa
本当に、何言ってるか理解出来ないから、振った話には一切言及出来ない。
こういう所でレベルが透けるんだよなあ。

302デフォルトの名無しさん (ワッチョイ af8b-bXGz)2017/09/22(金) 00:05:31.90ID:XNPiuLNV0
もうなりふり構ってられなくなったなw
いいよその調子w

303デフォルトの名無しさん (アークセー Sxa3-7O1h)2017/09/22(金) 01:17:48.87ID:TDU45J/zx
>>299
なんで相手してるんだ?

304デフォルトの名無しさん (ワッチョイ 06e4-XBbO)2017/09/22(金) 02:57:45.48ID:zgKhpRaR0
久しぶりにこのスレ戻ってきたけどまた随分荒れてるね。

まぁどんな手法で作った方が良いかなんてそのときのシュチュエーションで決まるものだから
議論してもあまり意味がないと思うよ。

そんなことより変更に対して厳しく、追加に対しては寛容になるような作りにするような
もっと基本的なことを念頭におくようにした方がより効率的に改修出来たりするよ。

305デフォルトの名無しさん (ワッチョイ af8b-lQLN)2017/09/22(金) 07:49:01.52ID:XNPiuLNV0
また教えたがりが一匹ふえたw

306デフォルトの名無しさん (ワッチョイ 0f73-Dazs)2017/09/22(金) 08:36:54.40ID:q9/2ZYK50
質問スレに質問と回答以外の事を書き込むなよな

307デフォルトの名無しさん (スフッ Sdaa-NQgr)2017/09/22(金) 10:26:04.56ID:BmGv97NWd
まず>>306が質問でも回答でもない時点で何を言っているんだーおまえわー
自分だけは特別だと思ってる自意識過剰かー
単なるバカなのかー

308デフォルトの名無しさん (オッペケ Sra3-HalC)2017/09/22(金) 10:44:51.56ID:FdbOU1iGr
VBAに高階関数ってないんすかね?

309デフォルトの名無しさん (スップ Sd4a-6FY3)2017/09/22(金) 11:45:21.15ID:JBjlrBKTd
>>308
条件に応じて関数を選択してそれのAddressOf値を返すことはできるから
強いて言えばあると言えばあるね

310デフォルトの名無しさん (アウアウカー Sa6b-XBbO)2017/09/23(土) 05:57:25.45ID:3crN9LRXa
>>306
ぁあ?
だったら昔みたいにガッチガチにルールで縛りつけたスレ立ててそこで1人でやれやボケ

311デフォルトの名無しさん (アウアウカー Sa6b-XzBy)2017/09/23(土) 09:39:55.56ID:hX9NlXapa
ルールで縛らないで良いなら質問と回答以外書き込むなと書くこともアリだろ。
アホなこと書いても良いが、その分そいつが批判されるのも仕方ないということ。

アホな初心者がかつて批判されたことを根にもって相手の力量も分からずに噛みついてるんだから批判されても仕方ない。

312デフォルトの名無しさん (オッペケ Sra3-HalC)2017/09/23(土) 09:50:48.00ID:3ppsxCRMr
>>309
すんません、表現が良くなかったです。
mapとかfoldとかfilterとか、それらに付随してラムダ式とかです。
調べたけどなさそうですね。MSさん、用意して欲しいな、、

313デフォルトの名無しさん (ワッチョイ 0a06-hoCt)2017/09/23(土) 11:22:54.85ID:ck0qiPja0
VBAにラムダ式を望むなよ

314デフォルトの名無しさん (アウアウカー Sa6b-XBbO)2017/09/23(土) 12:43:51.76ID:s+vr+Saza
>>311
VBAみたいに片手間でやるような言語のスレで
初心者って言われてもなぁ

315デフォルトの名無しさん (ワッチョイ 8aaa-Dc1X)2017/09/23(土) 12:55:31.84ID:dWsmcDp10
>>312
filterってなに?

316デフォルトの名無しさん (ドコグロ MMc2-gXon)2017/09/23(土) 12:58:26.11ID:pHSma+nnM
2ch初心者か?
肩の力抜けよ

317デフォルトの名無しさん (ワッチョイ 8aaa-Dc1X)2017/09/23(土) 13:44:03.04ID:dWsmcDp10
>>312

これ見て理解した
http://www.cse.unsw.edu.au/~en1000/haskell/hof.html

318デフォルトの名無しさん (ワッチョイ 3b6f-HalC)2017/09/23(土) 13:49:15.21ID:HcxyMvzb0
>>313
HaskellでNLPやってて、小回り利くなと感じた。エクセルの事務作業と相性いい。

>315
エクセルのフィルターとまさに同じ、
例えば[10,2,34,401]から偶数を抜きたければ、
filter (\x -> mod x 2 == 0) [10,2,34,401]などとやる。
桁が三桁のを抜くなら、
filter (\x -> length x == 3) [10,2,34,401]とか。

319デフォルトの名無しさん (ワッチョイ 3b6f-HalC)2017/09/23(土) 13:50:46.59ID:HcxyMvzb0
>>317
まさにそれですね。

320デフォルトの名無しさん (ワッチョイ 8aaa-Dc1X)2017/09/23(土) 14:02:25.24ID:dWsmcDp10
Haskellは三日坊主で終わったとはいえヤバい

321デフォルトの名無しさん (ワッチョイ 466d-XBbO)2017/09/23(土) 14:09:02.53ID:BetVnWHy0
EXCELはシートにSQLが使えるから場合によってはそっちの方が使えるのでは。
LINQやラムダ式でガッツリやりたいのであれば
もうEXCELの範疇を超えているので
.netでentityFreamworkとか使ってやった方がいいと思うよ。

322デフォルトの名無しさん (ワッチョイ 3b6f-HalC)2017/09/23(土) 15:07:07.52ID:HcxyMvzb0
>>321
ありがとう、調べてみます。

323デフォルトの名無しさん (ワッチョイ 06bf-ufUr)2017/09/23(土) 17:39:07.55ID:6qmI5T+w0
do while not eofと do until eofは同じですか?

324デフォルトの名無しさん (ワッチョイ 4ab3-UH40)2017/09/23(土) 18:26:20.13ID:hvHU1vjm0
>>323
同じじゃないと思える根拠を書いてくれないか?doの後じゃなく
Loopの後に条件を書いたらそりゃ違うだろうけど。

325デフォルトの名無しさん (ワッチョイ 06bf-ufUr)2017/09/23(土) 18:38:13.30ID:6qmI5T+w0
>>324
ありがとうございます
同じことでも言い換えられるんですね

326デフォルトの名無しさん (ワッチョイ 06e4-vS2A)2017/09/23(土) 19:18:36.34ID:paUCbsLX0
>>324-325
特定の状況では結果が異なるから完全に同一ではないけどな

Sub test()
Dim eof As Variant
eof = Null
Do Until eof
MsgBox "Untilを実行した"
Exit Do
Loop
Do While Not eof
MsgBox "While実行した"
Exit Do
Loop
End Sub

eofがTrue/Falseしかないなら同じ動作だけど、そのどっちでもない場合は同じ動作するとは限らん
Null扱うなら覚えておかないとはまるぞ

327デフォルトの名無しさん (ワッチョイ ff3d-hoCt)2017/09/23(土) 19:31:29.38ID:ljq3IKQ50
Notはビット反転だから真偽値以外だと挙動が変わるわな。
Nullは色んな判定を挟む前にFalseを返す仕組みのはずだから、また問題が違うような気もするけど。

328デフォルトの名無しさん (ワッチョイ 06e4-vS2A)2017/09/23(土) 19:56:35.16ID:paUCbsLX0
>>327
VBAには暗黙の変換ってのがあってな
>Notはビット反転
数値型に対してはな
真偽値にたいしてビット演算は規定されていないはず

>Nullは色んな判定を挟む前にFalseを返す
Nullが常にFalseを返すなら、>>326みたいな事にはならん
Nullには伝播性ってのがあってな、基本的にNullを含む式はNullを返す
返してるのはあくまでNullであって、TrueでもFalseでもない

Do Loopのヘルプにわざわざ
>引数 condition の値が Null 値の場合、引数 condition は偽 (False) であるとみなされます。
ってかいてあるだろ

329デフォルトの名無しさん (ワッチョイ 4ab3-UH40)2017/09/23(土) 20:57:28.95ID:hvHU1vjm0
>引数 condition は偽 (False) であるとみなされます。
自分で答えを書いているように思うが。

330デフォルトの名無しさん (ワッチョイ ff3d-hoCt)2017/09/23(土) 21:10:26.95ID:ljq3IKQ50
俺が「Falseを返す」と表現したのが悪かったな。
「Nullが含まれる式は必ずFalseとして判定される」と書かなきゃいけなかった。

331デフォルトの名無しさん (ワッチョイ 8aaa-Dc1X)2017/09/23(土) 21:13:02.41ID:dWsmcDp10
関係ないけど Not 1 が False 扱いにならないのは地味に不便だ

332デフォルトの名無しさん (ワッチョイ 06e4-vS2A)2017/09/23(土) 22:09:48.51ID:paUCbsLX0
>>330
それが分かってれば問題はないんだけど、分かってても勘違いしたりするからなぁ
Nullの扱いが直感的じゃないってのが最大の敵

>>331
VBAのTrueは-1だからな
Not -1とかNot CBool(1)とかならFalse扱いだし

333デフォルトの名無しさん (ワッチョイ 466d-uAR+)2017/09/23(土) 22:56:39.62ID:7cmO2hJI0
vbaとExcelで数値とbooleanの変換が変わるのは怖い

334デフォルトの名無しさん (ワッチョイ 238f-PvnN)2017/09/24(日) 00:06:38.99ID:CZiBIXmW0
きっと〜、あなたは もどってくるだろぅをー

335デフォルトの名無しさん (ワッチョイ af8b-bXGz)2017/09/24(日) 02:19:39.33ID:3BjqQEbI0
ハイ戻ってきましたぁ!
また調子こいた教えたがりがしゃしゃってんのか?
バカはどいつだ?

336デフォルトの名無しさん (イモイモ Se66-Dc1X)2017/09/24(日) 03:07:22.68ID:2VO5tOtwe
∧_∧
( ´・ω・)
( つ旦O
と_)_)

337デフォルトの名無しさん (ワッチョイ 2b8f-z8ZY)2017/09/24(日) 08:32:58.01ID:wIEwKcgM0
>>331
Not 1と書くシーンがわからんが、素直に(?)Not TrueとかFalse とか書けば?

338デフォルトの名無しさん (ワッチョイ eb6f-Dc1X)2017/09/24(日) 08:50:08.02ID:y7FzpsGf0
ドイツの技術は世界一ィィィ

339デフォルトの名無しさん (ワッチョイ 466d-PvnN)2017/09/24(日) 08:51:55.94ID:sE41CGP30
Not Trueは新しいな

340デフォルトの名無しさん (ワッチョイ 466d-2rpO)2017/09/24(日) 08:53:02.43ID:sE41CGP30
ツール→参照設定で全てを参照する方法はありますか?

341デフォルトの名無しさん (アウアウカー Sa6b-XzBy)2017/09/24(日) 09:43:55.42ID:SDtHFGLja
>>314
ここで言われてる初心者ってのは殆どの場合、他の言語も初心者ってことだぞ。
技術的に初心者だから初心者と呼ばれてる訳じゃない。
自分の画面を見ることが出来ない相手にも伝わるように書くとか、条件を小出しにするとか、相手をロボットか何かと勘違いしてるような初心者以前の問題が有るから否定的な意味で初心者と言われてる。

それにVBAを片手間とか簡単に言うのもどうなんかね?
あまり使ったこと無い奴ほどそういうこと言ってるような気がするね。

内容が何ーつ無くて罵倒しか出来ない初心者君の真価が問われてる。

342デフォルトの名無しさん (ワッチョイ 8a11-gXon)2017/09/24(日) 09:51:58.93ID:gFeQddMX0
>>341
> 内容が何ーつ無くて罵倒しか出来ない初心者君の真価が問われてる。
ブーメラン w

343デフォルトの名無しさん (ワッチョイ 2b8f-z8ZY)2017/09/24(日) 10:06:08.42ID:wIEwKcgM0
>>339
ワシにとって Not 1はNot true程度には奇抜や

344デフォルトの名無しさん (ワッチョイ 8a11-gXon)2017/09/24(日) 10:11:23.30ID:gFeQddMX0
Not 1 は普通に使うけど?
LSB だけ変更したい時とか

345デフォルトの名無しさん (ワッチョイ 8aaa-Dc1X)2017/09/24(日) 10:26:12.50ID:J5lzydll0
「Not 1」と直接書くわけじゃなくて0/1を返す関数の返り値に対してのことだろ

346デフォルトの名無しさん (スププ Sdaa-z8ZY)2017/09/24(日) 10:29:39.61ID:D9ok3B4cd
>>344
うむ、ただ>>331は「Not 1 が False 扱いにならない」事を嘆いて(?)いるから、君とも意見が合わないかも知れない。

347デフォルトの名無しさん (ワッチョイ 8a11-gXon)2017/09/24(日) 11:00:50.23ID:gFeQddMX0
>>346
>>343に対するレスだから

348デフォルトの名無しさん (アウアウカー Sa6b-XzBy)2017/09/24(日) 11:49:34.08ID:SDtHFGLja
>>342
内容あるじゃねーか。
日本語も理解出来ないほど無能か?

349デフォルトの名無しさん (ワッチョイ 8a11-gXon)2017/09/24(日) 12:09:02.98ID:gFeQddMX0
>>348
スッカスカの内容あるとか言われてもなぁ w

350デフォルトの名無しさん (ワッチョイ 466d-PvnN)2017/09/24(日) 12:51:48.98ID:sE41CGP30
>>349
君のレスには内容ないけど、Sa6b-XzByは内容のあるレスをし続けているぞ

351デフォルトの名無しさん (ドコグロ MMc2-gXon)2017/09/24(日) 13:05:01.11ID:/081jZZtM
>>350
し続けてる?
>>348に内容あるとかバカなの?

352デフォルトの名無しさん (アウアウカー Sa6b-XzBy)2017/09/24(日) 13:52:50.28ID:SDtHFGLja
>>349
>>351

バーカ。

>自分の画面を見ることが出来ない相手にも伝わるように書くとか、条件を小出しにするとか

これが内容だ。
クズコードだとかお前の設計の方がよろしくないだとかはどこがどう駄目なのか言ってないから何も言ってないのと同じだ。

この違いも分からないから無能と呼ばれるんだよ。

353デフォルトの名無しさん (ワッチョイ 8a11-gXon)2017/09/24(日) 15:19:23.40ID:gFeQddMX0
>>352
いったいお前は誰と戦ってるんだよ w

354デフォルトの名無しさん (ワッチョイ af8b-bXGz)2017/09/24(日) 15:25:16.48ID:3BjqQEbI0
このバカよっぽど悔しかったんだなw
支離滅裂だけど悔しさだけは痛い程伝わるよ ID:SDtHFGLjaくん

だが俺にバカを嘲笑うのをやめろと言うのは土台無理な話だ
だってバカは面白いんだものw
これくらいはその小さな脳ミソでも理解出来るよね?おバカさんw

355デフォルトの名無しさん (ワッチョイ ff3d-hoCt)2017/09/24(日) 16:43:54.18ID:vk2rgPVS0
この罵倒しかしないヤツはVBAコードの一つも読めないのに何年も前から張り付いている本当の意味での異常者で、
どうも現実の生活で誰にも構ってもらえないからネットで罵倒を繰り返してレスポンスをもらって喜んでいるみたいなので、
各員は餌を与えないでください。いつまでも無意味なレスがついて荒れるだけです。

対策として「晒したコードに対し具体的なコードをつけて指摘しているもの以外は相手にしない」っていうテンプレでも追加してほしい。

356デフォルトの名無しさん (アウアウカー Sa6b-XzBy)2017/09/24(日) 16:48:20.79ID:jWeMnfEta
>>354
ほら、やっぱり内容がまるで無い。
小学生と変わらん。

357デフォルトの名無しさん (アウアウカー Sa6b-XzBy)2017/09/24(日) 16:53:01.46ID:jWeMnfEta
>>353
スレ見てれば分かるだろ。

>>274
>>281
>>287
>>296
>>299
>>354

どれ見ても内容が皆無。
殆ど無いじゃない。
ゼロ。

相手のどこが悪いのか全く言及出来ない奴は何も言ってないのと同じこと。

358デフォルトの名無しさん (ワッチョイ 466d-NfCk)2017/09/24(日) 16:54:20.86ID:sE41CGP30
>>343
すまん、どっちも始めて見た
1をbooleanにするのはテストでifを書く時だけだな
if 1 then

ってこれ間違ってた事に今気づいたわ。本来なら
if -1 then
だったわ

359デフォルトの名無しさん (ワッチョイ 8aaa-Dc1X)2017/09/24(日) 16:59:29.20ID:J5lzydll0
そんなことより、
0以外の数値をTrue扱いしたいのに、
If Not x が IfNot (x)じゃなくて If (Not x) なのが非常によろしくない

360デフォルトの名無しさん (ワッチョイ 8aaa-Dc1X)2017/09/24(日) 17:04:51.18ID:J5lzydll0
>>358
いや、
If 0 Then

If 1 Then
も想像してる通りに動きますよ。

少し直観と食い違うのは Not が絡むとき

361デフォルトの名無しさん (アウアウカー Sa6b-XzBy)2017/09/24(日) 17:05:32.05ID:jWeMnfEta
>>358
コメントの代わりに
#If 0 Then
は昔よく使ってたなあ。
最近は全く使わなくなった。
Not 1もNot TrueもIf -1 Thenも使ったこと無いな。

こういうのはその人の趣味というか癖みたいな問題だわな。
どれが良いとか悪いとかの問題じゃない。

362デフォルトの名無しさん (ワッチョイ ff3d-hoCt)2017/09/24(日) 17:08:48.88ID:vk2rgPVS0
しかし言うほど

If Not [Integer] Then

という書き方をするだろうか?

If Not Book Is Nothing Then

みたいな書き方はするけど、数値でNot使う事自体あんまりない気がする。

363デフォルトの名無しさん (ワッチョイ a71e-NQgr)2017/09/24(日) 17:09:54.28ID:3B64fACL0
MS系のBASICはずっと昔から「0」と「0以外」で真偽を判定するから、論理式では1もNot 1もありえない
もちろん-1なんかも使わない
俺の知る限り、約40年前に発売されたN-BASICの時代からこの仕様は変わってない

364デフォルトの名無しさん (ワッチョイ 8a11-gXon)2017/09/24(日) 17:11:40.94ID:gFeQddMX0
>>357
だからいちいち相手するなよ
おまえの内容とやらもたいしたこと言ってないんだし

365デフォルトの名無しさん (ワッチョイ 8a11-gXon)2017/09/24(日) 17:14:57.98ID:gFeQddMX0
>>359
> If Not x が IfNot (x)じゃなくて If (Not x) なのが非常によろしくない
それ一緒だろ w
C言語みたいに論理否定(!)があればいいだけの話

366デフォルトの名無しさん (ワッチョイ 466d-NfCk)2017/09/24(日) 17:20:20.54ID:sE41CGP30
>>362
数値型にnotは使ったこと無い。特に言語によってfalseが変わるから怖くて使えない
後者は普通に使う

367デフォルトの名無しさん (ワッチョイ 8a11-gXon)2017/09/24(日) 17:29:04.13ID:gFeQddMX0
>>330
> 「Nullが含まれる式は必ずFalseとして判定される」と書かなきゃいけなかった。
ところがどっこい
If 2 Or Null Then 〜 Else 〜 End If
は True (と言うか整数の2)と評価されたりするんだな
0 Or Null は Null になるとか挙動が読めないけど
@Excel 2013

368デフォルトの名無しさん (アウアウカー Sa6b-XzBy)2017/09/24(日) 17:29:31.46ID:jWeMnfEta
>>364
俺の書いた回答に対してアホが罵倒したのが最初だよ。
お前の書いた>>344なんて初心者でもやらんわとでも言われたら頭来るだろ。

369デフォルトの名無しさん (ワッチョイ 8a11-gXon)2017/09/24(日) 17:30:59.09ID:gFeQddMX0
>>366
True ならわかるけどFalseが0以外の言語ってあったっけ?

370デフォルトの名無しさん (ワッチョイ 8a11-gXon)2017/09/24(日) 17:34:26.89ID:gFeQddMX0
>>368
単にビット演算の必要がなかっただけなんだろうなとしか思わん
まあ内心でレベルひくって思うけど w

371デフォルトの名無しさん (アウアウカー Sa6b-XzBy)2017/09/24(日) 17:38:18.30ID:jWeMnfEta
>>370
俺はそれなりの奴から根拠ある批判をされた場合は何とも思わん。
びっくりするぐらいレベルの低い奴から根拠の無い批判をされた時は赦さんね。

372デフォルトの名無しさん (ワッチョイ 238f-z8ZY)2017/09/24(日) 18:38:38.48ID:yAXo7hpi0
>>358
だろうな。ワシも書いたの初めてや。そのレベルの奇抜さって事。

373デフォルトの名無しさん (ワッチョイ 8aaa-Dc1X)2017/09/24(日) 18:50:18.13ID:J5lzydll0
isSomeStatusが整数を返す関数のとき
If isSomeStatus(x) Then 〜
を使ってて、つい
If Not isSomeStatus(x) Then 〜
と書いてしまうことはない?

374デフォルトの名無しさん (ワッチョイ af8b-lQLN)2017/09/24(日) 18:54:12.91ID:3BjqQEbI0
>>368
人並みに頭に来てんだおバカさんw
結構結構、もう少し熱くなって一度爆発でもしていまえば少しはクールになるかもねw
お前のちっぽけな脳ミソもw

あ、後もう一つ、お前はもうしゃべるな

375デフォルトの名無しさん (ワッチョイ 8a11-gXon)2017/09/24(日) 20:10:34.74ID:gFeQddMX0
>>373
> isSomeStatusが整数を返す関数のとき
なら
> If isSomeStatus(x) Then 〜
なんて書かないで
If isSomeStatus(x) <> 0 Then 〜
って書く

376デフォルトの名無しさん (ワッチョイ 238f-z8ZY)2017/09/24(日) 20:15:55.53ID:yAXo7hpi0
>>373
無い。つか、そう書かない事を理想としている。
変数も定数もプロシージャも型を意識するようにこころがけている。

377デフォルトの名無しさん (ワッチョイ ff3d-hoCt)2017/09/24(日) 20:21:50.61ID:vk2rgPVS0
使ってるうちに関数の返値型は暗記するし、そもそも一度は確認するだろうから、
真偽値以外でNotをうっかり使うというケースはあんまりなさそう。

というかうっかりNot 整数をやっちゃったぜって事ならイミディエイトウィンドウで確認する癖を付けた方がいいと思う。

378デフォルトの名無しさん (ワッチョイ 8aaa-Dc1X)2017/09/24(日) 20:22:09.47ID:J5lzydll0
>>375-376
なるほど

379デフォルトの名無しさん (ワッチョイ 8aaa-Dc1X)2017/09/24(日) 20:25:18.45ID:J5lzydll0
組み込みの Is〜 が As Boolean になっているけど
自分の Is〜 は As Long にしたくてそうしてるんだけど、返り値を受けた時の書き方を
統一的に扱えないのが悩みの種なんですよね...

380デフォルトの名無しさん (ワッチョイ 238f-z8ZY)2017/09/24(日) 20:48:20.98ID:yAXo7hpi0
>>379
それは(失礼を承知で言えば、)ネーミングにセンスが無い。isほにゃららFunctionはBooleanに統一すべし。

381デフォルトの名無しさん (ワッチョイ 8aaa-Dc1X)2017/09/24(日) 21:04:44.94ID:J5lzydll0
>>380
そうなんだけど...
返り値を合計したものが「〜にあてはまるもの」の数に一致させたいんですよ

382デフォルトの名無しさん (ワッチョイ ff3d-hoCt)2017/09/24(日) 21:06:12.98ID:vk2rgPVS0
同じ関数名で宣言するとユーザー定義関数の方が優先されるはずだから、
いっそ組み込み系のIs〜を全て再定義してしまえばいいのではないだろうか。

383デフォルトの名無しさん (ワッチョイ 8aaa-Dc1X)2017/09/24(日) 21:12:51.54ID:J5lzydll0
もちろん「Isなんちゃら〜」の返り値を合計した後で -1 をかければいいんだけど、
Trueが-1であることに依存するのもなんかこう、しっくりこないんですよね。

384デフォルトの名無しさん (ワッチョイ 238f-z8ZY)2017/09/24(日) 21:15:05.28ID:yAXo7hpi0
>>381
うむ、気持ちはわからないでは無いがそれは駄目だ。関数名cntなんとかとかnumなんとかとか「〜の数を返す」ヤツらルールを決めて統一すべし。

385デフォルトの名無しさん (ワッチョイ 238f-z8ZY)2017/09/24(日) 21:18:21.48ID:yAXo7hpi0
>>383
-1をかける、とかそんな言語仕様に強く依存する(グロテスクな)コーディングはしないほうが良いと思わない?

386デフォルトの名無しさん (ワッチョイ 8aaa-Dc1X)2017/09/24(日) 21:18:39.00ID:J5lzydll0
>>380,384

うーん、しょうがない。

これから大改造するか。

387デフォルトの名無しさん (ワッチョイ 238f-z8ZY)2017/09/24(日) 21:24:09.04ID:yAXo7hpi0
>>386

大改造になっちゃうの?それはすまない。
けど、
Function isほにゃらら() As Long
は、やはり美しくないよ。

388デフォルトの名無しさん (ワッチョイ 8aaa-Dc1X)2017/09/24(日) 21:26:50.23ID:J5lzydll0
いや、
大改造はわくわくする

389デフォルトの名無しさん (アウアウカー Sa6b-XzBy)2017/09/24(日) 22:16:54.54ID:SDtHFGLja
>>374
小学生に罵倒されれば誰でも頭に来る。
内容が無ければ尚更だ。
それに、小学生はきちんと躾ける主義でね。

バカにはちゃんとバカと言うべきなんだ。

質問に関係無いことしか書かないバカが人に対してここに来るななどと言う資格があるわけ無いだろう。
そんなことも分からないから小学生と呼ばれるんだ。

390デフォルトの名無しさん (アウアウカー Sa6b-XzBy)2017/09/24(日) 22:20:23.66ID:SDtHFGLja
>>381
Isで始まる名前を変えれば良いと思うのは俺だけ?
或いは戻り値はBooleanだけど引数をもう1つ用意して、そこに合計を返すとか。

391デフォルトの名無しさん (ワッチョイ af8b-Ncsu)2017/09/24(日) 22:24:54.53ID:3BjqQEbI0
>>389
お前小学生にもバカにされてんのかwwww
最近の小学生もすてたもんでもないなw

392デフォルトの名無しさん (アウアウカー Sa6b-XzBy)2017/09/24(日) 22:29:18.40ID:SDtHFGLja
元の引数の値に合計を入れて返しちゃうのはさすがに変な気がするけど。

393デフォルトの名無しさん (アウアウカー Sa6b-XzBy)2017/09/24(日) 22:30:18.80ID:SDtHFGLja
>>391
ここまで言われて内容がまるで無いから呆れる。
百害あって一利なしだ。

394デフォルトの名無しさん (ワッチョイ af8b-Ncsu)2017/09/24(日) 22:39:03.86ID:3BjqQEbI0
>>393
お?少しは謙遜の気持ちも芽生えてきたか?w
でもお前は百害どころか毒にも薬にもならんよw
だってバカなんだからw笑えるけどwww

395デフォルトの名無しさん (ワッチョイ 3bb1-Dc1X)2017/09/24(日) 22:52:38.60ID:z5Fx3/zG0
誰か助けてください。

今日一日かけて作ったマクロが、先程エクセルがクラッシュしてしまい自動修復が働き、マクロだけ消失してしまいました。

クラッシュ直後のxlsmファイルをZIPにして「vbaProject.bin」を取り出したりは出来たのですが、
新しいxlsmに取り込んでもやっぱり開くと修復で消えてしまうようで・・・

何とかしてソースコードを取り出すことはできないでしょうか・・。

396デフォルトの名無しさん (アークセー Sxa3-ZMJA)2017/09/24(日) 23:42:55.80ID:ALrIElNwx
一日で作れるマクロなら大した分量じゃないだろうしもう一回同じコードを組めば良いんじゃね

397デフォルトの名無しさん (ワッチョイ eb6f-Dc1X)2017/09/24(日) 23:52:01.97ID:y7FzpsGf0
>>395
こまめに保存しないとそういう目に合うという経験を得られてよかったね
次から気を付けないとね

398デフォルトの名無しさん (ワッチョイ 3bb1-Dc1X)2017/09/24(日) 23:53:04.05ID:z5Fx3/zG0
>>397
保存はしてあったんだが、ファイルそのものが破損してた。
定期的にExcel落とさないとダメみたいだね。

399デフォルトの名無しさん (ワッチョイ 8aaa-Dc1X)2017/09/25(月) 00:00:34.87ID:vsx3Rgi+0
>>398
自分はモジュールごと定期的に保存フォルダにドラッグ&ドロップしてる
いちいち「ファイルのエクスポート(E)...」とかしなくてもできることを知って楽になった。

400デフォルトの名無しさん (ワッチョイ ff3d-hoCt)2017/09/25(月) 00:01:40.54ID:AH/NDHtT0
>>398
確かにエクセルは保存をかけても終了するまで保存しないんだよな。たぶんXML形式にして保存する関係からだとは思うけど。
自動バックアップからなら修復の可能性はあるけど、マクロだけ消えたならそのファイル自体は元々マクロ書く前の状態なんじゃないかな。

401デフォルトの名無しさん (ワッチョイ 4ab3-UH40)2017/09/25(月) 00:02:16.67ID:Ch3TwtIS0
あはは、俺なんかそんなのしょっちゅうだぜW
ノリノリで良さげなコードが書けてる時に限って突然落ちやがるWW
もうね、マメに保存する癖を付けないとどうにもならないよね

402デフォルトの名無しさん (ワッチョイ 06e4-vS2A)2017/09/25(月) 00:05:47.41ID:PaZojpJN0
>>367
Orのヘルプに書いてある通り
True Or Null はTrue
False Or Null はNull
で、
CBool(2)はTrue
CBool(0)はFalse
なので、仕様通りの動作ではある

Orはどちらかが真なら真なので、片方が不定でも真だという理屈だな
ショートサーキットしないくせにな
どちらかが偽なら、もう片方に従うから、もう片方が不定なら不定
まあ、理屈として考えれば納得はできる

403デフォルトの名無しさん (ワッチョイ 3bb1-Dc1X)2017/09/25(月) 00:07:49.88ID:kbDcK8g50
>>396
朝から書き続けてたから1000行以上ある。かなりつらい。

何度同じような書いてもクラッシュするので原因を調査していたのですが、判明したので報告します。
Windows10 / Excel 2016

1.一番最初のコーディング中にクラッシュした原因
※そもそも取得のために引数にした配列を直接書き換えようとするのが間違いか。

↓下記変数を関数で生成
Dim fl() as string
call GetFileList(fl)
-----
function GetFileList(ByRef fl() as string)
Redim fl(1 to 123,1 to 1)
end function
-----

↓この構文を入力してEnter押すと必ずエクセルがクラッシュする。
ReDim Preserve fl(, 1 To 2)

↓正しいコード。これならクラッシュしない。
ReDim Preserve fl(LBound(fl) To UBound(fl), 1 To 2)

次レスへ続く

404デフォルトの名無しさん (ワッチョイ 3bb1-Dc1X)2017/09/25(月) 00:12:44.30ID:kbDcK8g50
>>403
2.クラッシュした後にマクロが消失した理由
とあるモジュール(*.bas)を取り込むと、上書き保存は問題なくできるのだが次回ブックを開いた時必ず「vbaProject.bin」が消失することが判明した。

クラッシュしなくなるまでの手順
@新規エクセルブックに移行
Aインポートしたbasのコードだけをコピーして新規モジュールに貼り付け
B下記のような定数があったので、FileSystemObjectのクラスと競合しないよう別の名前に変更
Enum flGetMode
File = 1
Folder = 2
All = 3
End Enum

Enum flGetMode
flFile = 1
flFolder = 2
flAll = 3
End Enum

>>399
そうだな・・・今度からエクセル落とす前にモジュールだけ取り出すことにするわ。

>>400
エクセル、マジ、怖い EMK

>>401
今回のはマメに保存するというより、ブックを別ファイルにバックアップしないと対処できないかな。
今度から毎時間スナップショット撮るようにするわ

405デフォルトの名無しさん (アウアウカー Sa6b-XzBy)2017/09/25(月) 03:13:19.89ID:eYOvRkV+a
>>394
よっぽどアホな質問して怒られたのが悔しかったのか?
碌にコードも書けないのに居残ってるってことはw

406デフォルトの名無しさん (アウアウカー Sa6b-XzBy)2017/09/25(月) 03:21:24.47ID:kQfKGPg6a
>>400
そうなの?
保存したのにされてないってのは経験無いなあ。

>>399
バックアップするマクロとか書いてたけどウィルス判定されることもあるし、最近はやってないわ。

407デフォルトの名無しさん (アウアウカー Sa6b-XzBy)2017/09/25(月) 03:26:59.82ID:kQfKGPg6a
>>404
列挙の場合、自分はメンバーの先頭にすべてenmを付けてるな。
昔、誰かがこれやってるの見てからは。

408デフォルトの名無しさん (ワッチョイ 8aaa-Dc1X)2017/09/25(月) 06:57:33.96ID:vsx3Rgi+0
ExcelがクラッシュするならWord VBAで書けばいいのに
(半分マジ)

409デフォルトの名無しさん (ワッチョイ 0a06-hoCt)2017/09/25(月) 07:18:55.09ID:CDmpdlRb0
>>399
ファイルのエクスポートってのは知ってるけど「モジュールごと」ってのは具体的にどうするんです?

410デフォルトの名無しさん (ワッチョイ 466d-uAR+)2017/09/25(月) 07:24:22.76ID:dVWzg8Zn0
スプレッドシートで開いてみるとか
ファイル壊れてたらダメ化

411デフォルトの名無しさん (ワッチョイ 06e4-XBbO)2017/09/25(月) 07:25:07.82ID:5kCjH3U30
>>341
はっきり言おう
VBA自体が間口が広いために初心者が扱い易い言語ではあるが
大きなシステムやWeb系には向いていないために
全体から見れば「VBAの上級者」というのは
所詮井の中の蛙に過ぎない。

自称VBA上級者よりVBAの上級者じゃなくても
JAVAや.Netの知識を多少なりとも持っていて
そっちも出来るという方が基本的に給料が高いというのはそのせい。

つまりここで初心者がどうのと煽っている奴も
所詮は初心者の域を超えていない。
初心者が初心者を煽ってるだけ。
もっとも俺も自分を初心者じゃないなんてとても
おこがましくて言えないけどね。

412デフォルトの名無しさん (ワッチョイ a71e-NQgr)2017/09/25(月) 07:25:18.87ID:8Tm148qB0
>>409
VBEのプロジェクトエクスプローラでモジュール名を右クリ

413デフォルトの名無しさん (スップ Sd4a-6FY3)2017/09/25(月) 07:36:56.29ID:VZWzPiEFd
>>409
コードのコピペとか右クリからエクスポート(E)...じゃなくて直接ドラッグ&ドロップするの

414デフォルトの名無しさん (ワッチョイ 466d-RgoO)2017/09/25(月) 07:48:23.85ID:dVWzg8Zn0
>>411
その話題はもういいよ

415デフォルトの名無しさん (オッペケ Sra3-Ncsu)2017/09/25(月) 12:29:49.86ID:nP4bJmmCr
>>411
自分が初心者なら皆初心者に違いないってかw
賢いふりをしてるけどお前も>>341となんも変わらない無知を知らぬバカやぞwww

416デフォルトの名無しさん (ワントンキン MMfa-GOPe)2017/09/25(月) 12:51:20.05ID:b3e1p2YsM
403だけど、会社のEXCELでも試してみたらやっぱりクラッシュする
redim aaa(,1 to 2)
まぁコードとしては間違いだから滅多にこんな書き方しないんだけどさ
でも
redim aaa(,1)
なら、ただのエラー(赤字)になるだけでクラッシュしないから納得行かないわ
一応MSには送っておいた。
参考まで。

417デフォルトの名無しさん (アウアウカー Sa6b-XzBy)2017/09/25(月) 13:08:28.70ID:eYOvRkV+a
>>411
JAVAや.netのできる上級者も多いと思うが。
というか、上級者は他の言語もできる奴が多いだろ。
主戦上がどこかというだけだし、そもそも主戦上だって他言語の人もいるだろ。

俺がどうあってもかなわないと思う人はVBA上でアセンブラ使ってるし。
実際、俺も大したレベルじゃないがCやJAVA、.netも書くしアセンブラも勉強中。

VBA使いだからといってレベルが低いわけじゃない。

418デフォルトの名無しさん (スップ Sd4a-6FY3)2017/09/25(月) 14:27:01.66ID:VZWzPiEFd
>>417
VBA上でアセンブラ?
興味深いな

419デフォルトの名無しさん (アウアウカー Sa6b-XzBy)2017/09/25(月) 16:13:22.32ID:715ByDora
>>418
正確にはマシン語だね。
VBAとアセンブラでググれば見つかる。
マシン語のコードを変数に格納してメモリ操作して実行させる。

VBAの制限のために普通じゃ出来ないことをしようとする場合や普通に書くとどうしてもスマートじゃない場合に使う。
個人的に使いたい場面が2つ有るけど技術的に自分のものに出来て無いので使ったことは無いが。

420デフォルトの名無しさん (スップ Sd4a-6FY3)2017/09/25(月) 20:21:50.79ID:VZWzPiEFd
>>419
確かに、ぐぐったらすぐに出てきたw

421デフォルトの名無しさん (ワッチョイ ff3d-hoCt)2017/09/25(月) 20:57:17.82ID:AH/NDHtT0
俺もマシン語とアセンブラ言語を勉強したなぁ。
早見表片手にバイナリ読むくらいのところまではいけたけど、
実際にメモリに転写して実行するとか手間が多すぎてあきらめたわ。

マシン語もシミュレータでOS作りに挑戦してHello Worldで止まってる。

422デフォルトの名無しさん (アウアウカー Sa6b-XBbO)2017/09/25(月) 21:10:50.83ID:um3WFj5Ia
>>419
これは駄目だないろんな意味で

423デフォルトの名無しさん (アウアウカー Sa6b-XzBy)2017/09/25(月) 22:14:52.84ID:715ByDora
>>421
VBA上でやる場合はアセンブラが主体じゃなくてVBAで出来ない部分だけに適用するわけだから、アセンブラ自体はそれほど複雑じゃないと思う。
自分の場合は別の言語でmemcmp使ったことがあって、それをVBAに移植する場合に使いたい。
ただ、そのプログラムをVBAで実現する意味が薄いように感じるのと別にmemcmp使わなくても代替あるかもしれないんで実際に組むかどうかは分からないんだけど。

424デフォルトの名無しさん (スプッッ Sd4a-6FY3)2017/09/25(月) 22:22:34.05ID:eJeLm77Wd
なんでそんなにしてまで?

425デフォルトの名無しさん (ワッチョイ ff3d-hoCt)2017/09/25(月) 22:35:59.26ID:AH/NDHtT0
>>423-424
まぁそこまでするなら別の言語にした方がいいというか、そもそも発想が逆というか。

オフィス製品を拡張する上で「守られた」プログラミングが出来るのがVBAの特徴だし、
目的を絞っているから実用的なプログラムを短時間でくみ上げられるという長所があるのであって、
マシン語まで勉強してやるくらいなら、その手の目的で作られたC++言語辺りを頼るべきなんだよな。

もちろんそれが出来ない環境だから俺もマシン語を勉強するに至ったんだけど、
けっきょく型安全すら保証されない世界で何かを組み上げるってのは趣味の世界の話であってVBAの本質からずれてるしね。

ちなみに勉強中にC言語ですらマシン語で直接組むよりも非効率になる可能性が高いと知ったんで学ぶ意味はあったけど。

426デフォルトの名無しさん (スプッッ Sd4a-6FY3)2017/09/25(月) 22:44:28.13ID:eJeLm77Wd
一体何の話をしているのか?
VBA補完というならC/C++で十二分だろうに
それで「実行環境がVBA」という気軽さは保てるんだし

427デフォルトの名無しさん (アウアウカー Sa6b-XzBy)2017/09/25(月) 22:52:54.75ID:715ByDora
>>424
自分はものにして無いので、そこまでしてない。
ものにしてる人にとってはそこまでしてなどと思ってないと思う。

別言語でdll作ってVBAから呼び出すことも出来るだろうけど、そこだけで完結しないのがスマートさに欠けるように感じるからかな。

428デフォルトの名無しさん (ワッチョイ ff3d-hoCt)2017/09/25(月) 22:54:34.22ID:AH/NDHtT0
>>426
確かに話がとっちらかって分かりにくくなったが、つまりそういう話をしてる。
でもVBA以外の環境を持てない職場なので仕方なくVBAが補完できる範囲だけでやるしかない。
その補完範囲にマシン語を含めるのはVBAの長所を殺しているのでVBAが想定している範囲の中で最善策を練るべきだと。

ちなみに個人的経験では次善の策としてSQLを使ったら地獄を見た。

429デフォルトの名無しさん (アウアウカー Sa6b-XBbO)2017/09/25(月) 23:12:01.96ID:FBvoBYTya
>>426
正解。

@まず保守性が酷い。都度ハンドアセンブルするのかって話。
Aラベルが付けられないからブランチ命令などは変更があったとき常にアドレスの相対位置を
設定し直さなければならない。ジャンプ命令みたいな絶対アドレス指定の場合はどうすんだろ。
B生産性が皆無
C中間言語を介在していないのでアーキテキクチャが異なるCPUでは使えない。

どうしてもアセンブラで組みたければC++のインラインアセンブラで素直にdllファイル作れって話。
こんなものどうやって普通にVBA組んでるやつに引き継ぐつもりなんだろうな。
出来ない環境でなければ設計自体を見直すか諦めろと。

430デフォルトの名無しさん (スプッッ Sd4a-6FY3)2017/09/25(月) 23:14:24.47ID:eJeLm77Wd
>>429
引き継ぎとかは別にして、まず楽しいのかと

431デフォルトの名無しさん (ワッチョイ 8aaa-Dc1X)2017/09/25(月) 23:23:42.83ID:vsx3Rgi+0
>>427
完結ってどういう意味?
「VBA アセンブラ」でググって出てくるページ見ると、既存のcdecl関数を呼び出すことを目標にしてるみたいだけど、
自分はどっちかっていうと「なるべく自分で作ったもので間に合わせたい」という気持ちの方が強いな。

432デフォルトの名無しさん (アウアウカー Sa6b-XzBy)2017/09/25(月) 23:36:31.33ID:715ByDora
>>425
VBAでCのコード扱えれば良いんだけどね。
それに既にWin32APIで色々やってるし、その中には適切に使わないと危険なものもたくさんあるから、別に使っても良いと思うけど。

>>429
まず、アーキテクチャが異なるCPUについては既にWin32APIの時点で使えない。
それにアセンブラが主ではない。
memcmpの部分で使うだけで使う方は呼び出すだけだ。

433デフォルトの名無しさん (アウアウカー Sa6b-XzBy)2017/09/25(月) 23:39:50.62ID:715ByDora
>>431
例えばdllを作るとブックと一緒にdllがついてまわることになるでしょ。
ブックだけでは機能しないというのがちょっと...

ということ。

434デフォルトの名無しさん (アウアウカー Sa6b-XBbO)2017/09/25(月) 23:40:01.82ID:FBvoBYTya
>>432
>まず、アーキテクチャが異なるCPUについては既にWin32APIの時点で使えない。

は?何言ってるの?

435デフォルトの名無しさん (オッペケ Sra3-yPpY)2017/09/26(火) 04:06:23.87ID:DLk9dqRTr
VBAの環境なのにマシン語使ってやったぜー
ワイルドだろー
って自慢したいだけ

436デフォルトの名無しさん (アウアウカー Sa6b-XBbO)2017/09/26(火) 07:38:19.44ID:XImuzds2a
どっちにしてもトリッキーすぎて
実用的ではないな

437デフォルトの名無しさん (オッペケ Sra3-Ncsu)2017/09/26(火) 12:18:09.16ID:YucCMyKYr
お前ら素直に感心する事も出来んのかw
惨めやのうwww

438デフォルトの名無しさん (アウアウカー Sa6b-XBbO)2017/09/26(火) 12:24:44.74ID:H2XQANIBa
関心する要素がない

439デフォルトの名無しさん (オッペケ Sra3-Ncsu)2017/09/26(火) 12:27:34.92ID:YucCMyKYr
そうゆうひねくれた心を持っとるからいつまでたってもバカなんやで

440デフォルトの名無しさん (アウアウカー Sa6b-XBbO)2017/09/26(火) 12:28:28.01ID:H2XQANIBa
ちなみにどこに感心すればいいの?
機械語の知識が殆ど無いこと?
VBA上でごく中途半端な機械語を走らせる方法をネットで見つけたこと?

441デフォルトの名無しさん (アウアウカー Sa6b-XzBy)2017/09/26(火) 16:11:30.66ID:PIh5pWG1a
VBAだけじゃどうにもならない、別途dllとの込みで扱うのはスマートじゃない。
そういう場合に使える方法があるということ。
他にもこの方法を使えればプログラムがスマートになるのにという場面もある。
これはVBAの制限によるものだけれど。

もっとも殆どの場合、これを必要とするコードを書くような事態自体ない。

普通はVBAではこの機能は実現出来ませんと回答することになるだろう。

442デフォルトの名無しさん (アウアウカー Sa6b-XzBy)2017/09/26(火) 16:25:14.72ID:PIh5pWG1a
>>434
すまんね。
君がどういうレベルの話をしてるのか、いまいち掴めない。
実際、そういうことも分からないから勉強中なんでね。

アーキテクチャが違うCPUってのが何のことを言っていて、使えないCPUについて具体的にどうして使えないのか示して貰えるかな。

443デフォルトの名無しさん (スプッッ Sd4a-6FY3)2017/09/26(火) 16:34:44.22ID:r3ztyMSNd
>>441
dll大好きマンの俺としてはその意見に賛成する事態自体ないな

444デフォルトの名無しさん (ワッチョイ 2b23-kYwA)2017/09/26(火) 16:47:20.57ID:w3seKs+r0
今どきアセンブラじゃないと
ダメな場面なんてほとんどない
速度が欲しいならC/C++で実用上十分

445デフォルトの名無しさん (アウアウカー Sa6b-XzBy)2017/09/26(火) 17:07:46.45ID:PIh5pWG1a
>>444
この場合は速度とか関係無いんで。
Cとかでも確かに外部dllを作れば可能だけど。
まあ、でもdll作る方が正論だわな。

問題は自分の望むdll作る能力が自分に無いことだね。

446デフォルトの名無しさん (ワッチョイ 2b23-kYwA)2017/09/26(火) 17:14:42.90ID:w3seKs+r0
VBAだけで実現できない機能があるならDLLでいい
今どきのWindowsでアセンブラなんてまず必要ない

447デフォルトの名無しさん (スプッッ Sd4a-6FY3)2017/09/26(火) 17:49:18.96ID:r3ztyMSNd
Visual Studio利用が前提ならdll作るのに大した苦労はいらないぜ。
Expressでもいいんだしな。

448デフォルトの名無しさん (ワッチョイ 4ab3-UH40)2017/09/26(火) 17:59:29.96ID:BLiEZOQr0
アドインを入れろというだけで嫌がられるのに・・・。DLLなんて言った日にゃ「何それ食えるの?おいしいの?」ってなもんで。
更にregsvr32で登録とか説明した途端「そんなメンドくさい事をやらずに出来ないの?」とかぬかされてムカついた今日此の頃

449デフォルトの名無しさん (ワッチョイ 2b23-kYwA)2017/09/26(火) 18:41:21.08ID:w3seKs+r0
いやDLLが嫌がられてるからって
毎回アセンブラで書いてたら
「これだけのことにそんな時間掛かるの?」とか
文句が変わるだけだろ

450デフォルトの名無しさん (ワッチョイ 4a11-IQsp)2017/09/26(火) 18:51:12.32ID:fvF/8EVL0
dllの登録とかはグループポリシーとスタートアップスクリプトで処理すればいいよ

451デフォルトの名無しさん (スプッッ Sd4a-6FY3)2017/09/26(火) 19:29:03.17ID:r3ztyMSNd
>>450
絶対パスは?

452デフォルトの名無しさん (ワッチョイ eb6f-Dc1X)2017/09/26(火) 19:33:40.39ID:PUkdjjHv0
>>448
ふざけてんなら教えてやんねぇから自分でやれ って言ってやれ

453デフォルトの名無しさん (スプッッ Sd4a-6FY3)2017/09/26(火) 19:48:34.37ID:r3ztyMSNd
シートをSQLでアクセスしたあとどうも変なことが起こる。
あしたデータをDBに入れてからSQLでアクセスして同じ現象が起きたら自分のプログラムミスだろうけど、
起きなければODBC for Excelを疑ってしまいそうだ

454デフォルトの名無しさん (アウアウカー Sa6b-XBbO)2017/09/26(火) 21:26:46.77ID:XImuzds2a
まぁdllくらいは面倒くさがらず設定出来ないとな。
今後デプロイ作業とかやるようになったらそれどころじゃないしな。

455デフォルトの名無しさん (ワッチョイ af8b-lQLN)2017/09/26(火) 22:11:26.14ID:Crd6WL0Z0
結局自分の知識を言いたいだけのお前らw
ババアの井戸端会議より無法地帯だなw


lud20170926231811
このスレへの固定リンク: http://5chb.net/r/tech/1503805217/
ヒント:5chスレのurlに http://xxxx.5chb.net/xxxx のようにbを入れるだけでここでスレ保存、閲覧できます。

TOPへ TOPへ  

このエントリをはてなブックマークに追加現在登録者数177 ブックマークへ


全掲示板一覧 この掲示板へ 人気スレ | Youtube 動画 >50 >100 >200 >300 >500 >1000枚 新着画像

 ↓「Excel VBA 質問スレ Part50 [無断転載禁止]©2ch.net->画像>30枚 」を見た人も見ています:
Excel VBA 質問スレ Part67
Excel VBA 質問スレ Part68
Excel VBA 質問スレ Part66
Excel VBA 質問スレ Part61
Excel VBA 質問スレ Part65
Excel VBA 質問スレ Part70
Excel VBA 質問スレ Part72
Excel VBA 質問スレ Part69
Excel VBA 質問スレ Part73
Excel VBA 質問スレ Part71
Excel VBA 質問スレ Part49
Excel VBA 質問スレ Part47
Excel VBA 質問スレ Part74
Excel VBA 質問スレ Part77
Excel VBA 質問スレ Part75
Excel VBA 質問スレ Part57
Excel VBA 質問スレ Part51
Excel VBA 質問スレ Part63
Excel VBA 質問スレ Part64
Excel VBA 質問スレ Part60
Excel VBA 質問スレ Part54
Excel VBA 質問スレ Part62
Excel VBA 質問スレ Part56
Excel VBA 質問スレ Part37
Excel VBA 質問スレ Part59
Excel VBA 質問スレ Part58
Excel VBA 質問スレ Part79(ワッチョイあり)
Excel Python 質問スレ
Excel VBA 質問スレ Part81 (889)
Excel VBA 質問スレ Part80(ワッチョイあり) (87)
Excel ピボット Power Pivot DAX関数 質問スレ (13)
Access VBA 質問スレ Part1
Access VBA 質問スレ Part2
DELL SC4x0 T10x 質問スレ Part1
Angel Love Online 質問スレ Part27
【RIFT】 Rift: Planes of Telara 質問スレ Part5
【FFBE】 FINAL FANTASY BRAVE EXVIUS 質問スレ
【FM】Football Manager 質問スレ 37
Counter-Strike: Global Offensive 質問スレ Part3
幻想神域 -Innocent World- 質問スレ Part14
【TESO】The Elder Scrolls Online 質問スレ Part27
【TESO】The Elder Scrolls Online 質問スレ Part24
【TESO質問】The Elder Scrolls Online 質問スレ Part1
【TESO】The Elder Scrolls Online 質問スレ Part46
【PS/XB】Elden Ring エルデンリング 質問スレ Part3
【TESO】The Elder Scrolls Online 質問スレ Part6 [無断転載禁止]
【PS4/XB1】SEKIRO:SHADOWS DIE TWICE 質問スレ Part4【隻狼】
【TESO】The Elder Scrolls Online 質問スレ Part15 [無断転載禁止]
【TESO】The Elder Scrolls Online 質問スレ Part25 [無断転載禁止]
【PS4/XB1】SEKIRO:SHADOWS DIE TWICE 質問スレ Part3【隻狼】
【PS4/XB1】SEKIRO:SHADOWS DIE TWICE 質問スレ Part1【隻狼】
gdi++.dll 質問スレ 1px
【PoE】 Path of Exile 質問スレ part14
【PoE】 Path of Exile 質問スレ part22
【PoE】 Path of Exile 質問スレ part33
【PoE】 Path of Exile 質問スレ part23
【FFBE】 FINAL FANTASY BRAVE EXVIUS 質問スレ6
【EOS】ECHO OF SOUL 質問スレ Part.3
【MGO】METAL GEAR ONLINE 質問スレ Part14
【PoE】 Path of Exile 質問スレ part26
【FFBE】 FINAL FANTASY BRAVE EXVIUS 質問スレ7
【FFBE】 FINAL FANTASY BRAVE EXVIUS 質問スレ7
18:38:35 up 15 days, 5:02, 0 users, load average: 7.84, 8.93, 13.47

in 0.0211021900177 sec @0.0211021900177@0b7 on 122708