Excel VBA 質問スレ Part50 [無断転載禁止]©2ch.net

レス数が1000を超えています。これ以上書き込みはできません。
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
いちおつしないとおちちゃうよ
2017/08/27(日) 15:00:10.00ID:e4TdDFEN0
http://soleil-lielos.net/image/o05.jpg
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を使用しております。
2017/08/27(日) 17:08:53.71ID:WmqrsSrM0
>>4
こっちも2010
そのプロシージャまんまコピーして(勿論「納品書」シートも作って)実行したけど正常終了
念のためワークシート数を2枚にして実行すればエラーになるけどそれはインデックスが有効な範囲にないというエラーで
そちらのエラーにはならない。

一応確認しておくけど、VBEditorの画面で上のデバッグ(D)からコンパイルをしてエラーは無い?
2017/08/27(日) 17:09:02.52ID:LjjEWylk0
>>4
時間がないやつは最初からアドバイスなんて出来ない。読むのめんどくさいだけだからそういう社交辞令は書かないほうが良い

で、2010だけどエラーが出なかった。式はおかしくないはず
Worksheets(3) は、3つめのシートを表す。シートが3つ以下だとエラーが立つが、その場合は「インデックス~」のエラーになる
もし可能ならブックごとアップロードしてほしい
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
2017/08/27(日) 18:52:31.15ID:LjjEWylk0
>>4>>8
よく分からない。普通にうまくいく(シート「納品書」がなかったからテキトーに作ったけど)
http://i.imgur.com/NeVGWfS.png
2017/08/27(日) 19:12:47.61ID:e4TdDFEN0
>>8
マクロを含むファイルは xlsm で保存しないとダメじゃね?
2017/08/27(日) 19:19:16.69ID:uEidIgYqa
うむ。
xlsxで保存するとマクロが消えるよ。
2017/08/27(日) 20:15:32.32ID:HYoDzU2+0
>>4
出版社のページでダウンロードしてきたらどうでしょうか?
正誤表は無いみたいですね。
2017/08/27(日) 22:32:38.03ID:WmqrsSrM0
>>8
まず最初にエクスプローラーのツール→フォルダーオプションの
表示タブで”登録されている拡張子は表示しない”のチェック外せ。
んで、拡張子xlsxとxlsmの違いについてVBAのその入門書の最初から読んで
勉強し直せ
2017/08/27(日) 23:11:29.74ID:y/dGwO3j0
vbaってpcのスペック関係あるん?
オフィス2010の32ビットでメモリー4gで全てのシートの枠線を一括して色変えろってのをやってるけど
すぐ動作しなくなるんだよね、俺のマクロが可笑しく書いてるだけかな
2017/08/27(日) 23:37:22.62ID:LjjEWylk0
>>14
ある
Excelは割りと最適化してくれるけど、最適化しないとこは猛烈に重い

あと、ヘタにvbaコード書くよりマクロの記録をまるまるコピペしたほうがいい場合も多い
2017/08/27(日) 23:57:27.56ID:jYGHj9310
たしかに枠線の色はパンチ効いてそうだな、メモリ的に
2017/08/28(月) 00:07:43.72ID:8e8g8cz+0
枠線じゃなくて罫線ね
色に関する機能はとにかく重い
2017/08/28(月) 00:21:31.22ID:uF0tQjXI0
どのくらいの大きさのものか、どのくらいの処理から重いと言うのかにもよるけど、
>>14と変わらない環境で5000行50列を縦横別々の判定で罫線引いてセルの背景色を行毎に変えて重要項目に個別に色付けてって処理でも五秒もあれば完了するし、
実務に影響が出るほど遅いって事なら、たぶんUnionでセルをまとめずに一つ一つに処理が発生するような事してるのでは?

処理の順番や組み合わせ次第で装飾的な処理はかなり軽く出来るはず。
GPU並の応答速度をセルに要求するなら知らんけど。
2017/08/28(月) 06:09:18.70ID:4ejthJEF0
銀行にはデータセンターがあって、機械で文字識別に失敗したものが、処理される

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

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

スレ違いだけど
2017/08/28(月) 17:53:40.80ID:pLim95Ou0
その銀行のシステムをExcelで作っているのでなければどうでもいいな
2017/09/01(金) 18:17:33.81ID:aTcGbRyI0
点数 人数 名前
10 0
9
8 3 foo bar moge
7 5 piyo poo


こういう感じのn行×3列の表があります。
人数は、その点数を取った人数です。
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を超えた行より上の行の背景色を変える、ということは、
「条件付き書式」で可能でしょうか?
2017/09/01(金) 18:36:17.67ID:phDteRqs0
>>22
ここVBAスレだからエクセルのスレで聞いた方がいいのでは。

VBAやってる人間って基本的にエクセルの機能知らなくて、
自分で実装した後にそういう機能がある事知って悶絶するのが普通だし。
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行目に設定した条件付き書式
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をインポートしなければいけないのでしょうか?
2017/09/02(土) 11:21:10.40ID:1XOwz87o0
reference型は存在しない
28デフォルトの名無しさん (ワッチョイ 43aa-k/3h)
垢版 |
2017/09/02(土) 11:56:02.84ID:m6EVfTkB0
ありがとうございます。
2017/09/02(土) 14:35:26.83ID:SpCYKXrKa
>>22
B列に条件付き書式で
=SUM($B$1:$B1)<10
いけるんじゃね。
2017/09/02(土) 18:32:32.23ID:JEC7rQdw0
皆様ありがとうございます。
累積人数の作業列を用意するやり方でできました。
2017/09/02(土) 21:49:19.26ID:BeXWDCQaa
>>29
何で列を追加する必要がある?
一番上のセルを絶対座標にして下のセルの行番号を相対にすれば各行迄の累積人数取れるじゃん。
2017/09/02(土) 22:25:34.44ID:9PaYDv7F0
>>31
それってスケールしなくない?
2017/09/02(土) 22:28:15.89ID:kdjl/egy0
苦いもんな
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
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列にフリガナが入力されています。
2017/09/06(水) 14:58:34.88ID:8y9+dC+fa
>>35
取りあえず出来たけど今PC閉じたんで書き込めない。
PC開ける環境までもう少し待ってくれ。

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

と書けばミスに気付くんじゃないかな。
2017/09/06(水) 15:14:58.67ID:oWb3celv0
ついでに言うと、そもそもvって何よw
stringなのに。
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もなかなか難しい
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
起動済みのインターネットエクスプローラを操作する上手い方法ありますか?
2017/09/07(木) 20:45:36.76ID:m3E2HFS70
キーボードマクロ
2017/09/07(木) 21:03:02.57ID:tDqTIin20
そら、Recordset 消してるだけだしな 毎回Recordset 消してどうしたいねん っていう
Save せんでええのんか っていう
2017/09/07(木) 22:52:40.38ID:vmFU5V5h0
select * なんてせずに使いたい行だけselect するってのはダメなんかい
2017/09/07(木) 22:53:51.32ID:vmFU5V5h0
あっ、行じゃなくフィールドね
2017/09/07(木) 22:58:55.63ID:D42mXrqtx
>>42
選べよw
2017/09/07(木) 23:53:31.42ID:wb4fzXuzp
>>45
Save メソッドですか?

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

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

>>46
>>42のSQLはあくまでサンプルですが、SQL文そのものはインプットなので、編集はできない状態だと考えていただきたいです
その上で結果のレコードセットを編集して出力することを考えています
2017/09/08(金) 08:13:46.68ID:lYRgyUUIM
削除クエリー走らせるとか
2017/09/08(金) 09:31:09.93ID:+Trj8D4m0
>>43
マウスを動かしてクリック
2017/09/08(金) 09:37:36.00ID:+Trj8D4m0
>>42
こういうことではないのか?
http://www.accessclub.jp/vbakaisetu/37.html
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実行時に削除したはずの列が復活してしまいます
2017/09/08(金) 12:48:46.68ID:w53+SGPnM
>>53
> レコードセットから列を削除したいのです
取得しなきゃいいだけだろ...

'1.クエリの実行
> Set rs = cn.Execute("select A,C from foo")
2017/09/08(金) 12:57:54.99ID:pmDC3Jkna
>>54
>>49でSQLは編集出来ないということらしい。

なんか、物凄く特殊なことしてるね。
レコード数から2次元配列作って1件ずつ入れてくといった泥臭い方法ぐらいしか無いんかね。
2017/09/08(金) 15:26:46.89ID:ryF3+zd7x
>>49
そのインプットとやら
に工夫施す
2017/09/08(金) 18:09:07.35ID:+Trj8D4m0
>>53
3貼り付けがAとCだけにすれば2は要らないのでは?
2017/09/08(金) 18:32:11.80ID:iUs2XBft0
初めからBをselectしなければ良いだけだけど、それが無理なら
張りつけてからB列消せば良いんじゃね
2017/09/08(金) 20:18:25.34ID:v/BetMU00
select A,C,B のほうがよさげ
2017/09/08(金) 21:03:05.17ID:ltI+C5Vk0
rsからrs2を作る
2017/09/08(金) 21:20:35.90ID:hXO+Cn8GM
>>55
> SQLは編集出来ないということらしい。
ああ、なるほど見落としてたわ
なら俺も泥臭い方法かSQLをパースして特定の列を抜いたSQLを組み立てるとかのトリッキーな方法しか思い付かんわ
2017/09/08(金) 23:59:54.71ID:E+LN5uAqp
みなさんレスありがとうございます

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

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

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

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

>>61
SQLは select * になるかもしれないし、予想がつきません
2017/09/09(土) 01:05:27.10ID:Nbl3ImVw0
どういうSQLが来るかも分からないのに特定の列を消す必要があるという事だけは分かるのか
2017/09/09(土) 01:14:41.31ID:F1q2327A0
文章の中から下みたいな文字列(URL)だけを削除するにはどうしたら良いんだろか。

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

数字の部分がうまく処理できない。
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)
を設定して渡すで良いのでしょうか?

ttps://pastebin.com/aJLAUnfc
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

これで破られない対策って誰かご存じないですかね?
自分で根ほり葉ほり動作調べてたら一日かかりそう
2017/09/09(土) 10:44:48.94ID:0n3DLxd60
てか破り方誰でもわかるセキュリティなんて何もしてねえのと同じだ
目からウ●コが落ちた
2017/09/09(土) 11:26:51.38ID:KlPTpWTP0
標準モジュール
2017/09/09(土) 12:21:56.16ID:JuaBWqmdE
>>66
・1行の文を途中で改行する際の末尾アンダーバー( _ )を付け忘れている。
・Optional を付けたらそれ以降の引数もすべてOptional じゃないといけない
72デフォルトの名無しさん (ワッチョイ dbaa-nhGI)
垢版 |
2017/09/09(土) 13:21:02.45ID:ioyoiZXd0
>>71
ありがとうございます。出来ました。
2017/09/09(土) 13:32:44.29ID:eNyHA1sg0
>>68
ない
MSですら公式に「間違って変更しないためのパスワードであり、セキュリティ云々ではない」と言ってる
ソースはどっか行った
2017/09/09(土) 13:49:29.47ID:0n3DLxd60
「ない」ってあんたそんなズバリと(^ ^;

APIのエキスパートなら自分でどうとでもするだろうけど
人に聞いて知ってるような方法はないってことですね
しょーがないか
75デフォルトの名無しさん (ササクッテロル Sp3b-6vZA)
垢版 |
2017/09/09(土) 14:33:51.65ID:OsDiJ+6Ap
>>68
パスワードの文字数を多くするとか
記号を使うとか文字の種類を多くする
2017/09/09(土) 14:42:58.59ID:0n3DLxd60
そういう問題じゃないんで・・
パスワードを解析するんじゃなく、記録してるとこからそれ自体引っ張り出して
解除させちゃうマクロらしいから、パスワードの複雑さ関係がないんで
2017/09/09(土) 15:11:07.11ID:5iFRXle+0
まず使い方が間違ってる

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

簡単に破れる方法であっても、意図的な操作がなければ破られることはないんで、目的は達成できている
2017/09/09(土) 15:41:57.68ID:F1q2327A0
>>65
ありがとう。やってみる。
2017/09/09(土) 16:07:18.45ID:0n3DLxd60
まあパスワードかけるなら出来合いじゃなくて
プログラマのハシクレなら自分でそんくらい作れってことかね
他人をあてにするもんじゃないっすね
2017/09/09(土) 16:17:06.10ID:OMWVHBMKd
一体どういう目的でパスワードかけるんだろう。実装をどうしても隠したいとかでなけりゃ破られても構わんだろ。
2017/09/09(土) 17:24:58.63ID:ScenqhoIa
社内で使ってるけど皆が改変して収拾がつかなくなって管理出来なくなるのを防ぐとかだったな。
前に見たパスワード掛けてたとこは。
2017/09/09(土) 17:28:22.68ID:uXhmIN/20
MSの公式見解だとパスワードはワークグループを分けて誤操作を防ぐ為のものであって、セキュリティ性は無いとされているね。

一応、VBAはバイナリファイルを読み書き出来るから、自分で暗号化技術調べてAES的な暗号化ファイルとか生成出来るぞ。
でも苦労して実装しても運用する奴らが素人だと暗号化した意味が無くなるから作り損だぞ。
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からならあっさり見えてしまうんだな。
見えるからコピペし放題
2017/09/10(日) 06:19:08.10ID:8d86nTZB0
運用ルールで勝手にいじるなって言えばいいじゃん
2017/09/10(日) 07:28:43.80ID:BQ8Qv0VP0
>>83
ほおそれは興味深いですねえ
探してみます
2017/09/10(日) 08:56:33.56ID:7PCuqjJO0
>>85
そんなんで解決できるなら誰も苦労せんわ
「何もやってないのに勝手におかしくなった」は聞き飽きた
2017/09/10(日) 09:11:12.77ID:emM90UQN0
「何もやってないのに勝手におかしくなった」
これ一番イラッと来るよな

「パソコンが壊れたー(フリーズしてるだけ)」
とか。
2017/09/10(日) 09:12:05.85ID:ZhpxeaJkd
「改変したい点がある。自分でやるのでパスワードを教えてください。」と
直球で要望が来たらどうするの?
2017/09/10(日) 09:17:02.60ID:WLChtAtMa
>>89
修正履歴書いて残せばいい
2017/09/10(日) 09:21:21.87ID:WLChtAtMa
チーム開発でも修正ルールがあるし
会社のシステムを書き換えるには上司の許可いるだろ
2017/09/10(日) 09:25:28.85ID:Gppr5zJi0
>>89
そいつ用にパスワード外して送ればいいんじゃね
もちろん改変後の質問は受けない
2017/09/10(日) 09:31:38.83ID:7PCuqjJO0
>>89
普通の会社では許可しない
規定のフォーマットで要望書をシステム課に出せ
2017/09/10(日) 09:51:20.19ID:emM90UQN0
>>91
vbaには無い。
こういうのは一般事務の女の子向けに男がヘラヘラ書いたもの、ってかvbaが安易に書き換えられる仕様は常識

会社の基幹システムはもちろん無理だけどね
変更許可は絶対に降りない。然るべき手続きが必要
2017/09/10(日) 10:26:56.59ID:7PCuqjJO0
>>94
基幹に近い所でVBAが動いてるうちの会社みたいなところもあるんやで
一部上場でテレビCMもガンガン流してて誰でも知ってる大企業

入力ミスをなくすためにワークシートにロックかけて入力から印刷までフォームなしのVBAで組んである
モッサリでめっちゃ使いにくいシステムで見積書とか作らされてる
下っ端の俺にはどうしようもない
2017/09/10(日) 10:31:20.17ID:emM90UQN0
>>95
世間知らずでスマンかった…
ご愁傷様なのだ
2017/09/10(日) 11:32:55.83ID:fMXB0jq4a
売り上げ金額が合わなかったので勝手に書き換えておきましたとかやってんのか?
2017/09/10(日) 11:38:17.51ID:fMXB0jq4a
知らない人がいつの間にか勝手に書き換えてましたじゃ駄目だろ
2017/09/10(日) 11:39:01.10ID:FH1GYxFV0
>>96
アライさんおつw
2017/09/10(日) 11:49:00.36ID:emM90UQN0
>>97
それ現場、現場の人間はマクロを触る能力なんかない
現場では調整用貯金箱とか作って、金が多かった日は貯金、少なかった日はそこから取り崩しとかやる
2017/09/10(日) 12:47:48.18ID:4u5v5mfoa
後は、客はパスワード解除しないだろう、出来ないだろうという前提でパスワード掛けてたことも有ったな。
客の別の部署の奴がプログラムの仕組みが見れては困るという要望に対して。

そういう案件の場合はExcelでやらずにちゃんとシステム組むべきという俺の指摘は営業的事情により却下されたな。
客がそんなに金使いたく無いんだとよ。
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
元の値は半角カタカナで別の名前が各セルの記入されています。
矢印の個所が参考書を元に記述しました。
2017/09/10(日) 14:06:44.63ID:iMMEfei9x
>>105
の文章がワカランカ
2017/09/10(日) 14:26:35.95ID:BQ8Qv0VP0
>>83
ツールあったから結局買いました
情報ありがとう
http://conex-office-password.com/shopdetail/001000000001/
もし駄目でもどうせ1000円だからな
2017/09/10(日) 14:49:33.57ID:ECkhuLxaa
>>107
これな。
仕組みが想像できる。
2017/09/10(日) 15:03:50.97ID:emM90UQN0
>>103
こうじゃないの?
Range("J5:J12").FormulaR1C1 = "=AVERAGE(RC[-7]:RC[-2])"
範囲上のセルに数式を入力する
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
2017/09/10(日) 15:15:05.13ID:7PCuqjJO0
>>104
右辺は単なる文字列です
セルにそういう「数式みたいな」文字列が入るだけ
2017/09/10(日) 15:15:26.00ID:lVUuTaKfa
というか、どうしても解除されたくなかったらxllアドインとかにすべきでしょ。
2017/09/10(日) 16:45:46.81ID:ciO3Bw990
>>100
それ持ち逃げしてもばれないよね
114デフォルトの名無しさん (ワッチョイ 5ab3-R8ON)
垢版 |
2017/09/10(日) 17:52:32.57ID:MQQa++S20
>>107
ああ、それ俺も買ったけど良かったよ。VBEを開こうとすると途端にエラーが出るので
大抵は諦めるね。俺はそれに加えてvbeのフォントを白にして嫁ないようにした。
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
2017/09/11(月) 01:14:13.54ID:cJ5w3XMz0
>>115
1セルずつループして処理すればtempを配列にする必要なんてない

どうでもいいけど、全角はvbWideじゃないのかね
全角スペースを半角にするのはReplaceあたり使えば良いんじゃね
課題ならその課題出した奴に聞けよと思うが
2017/09/11(月) 07:33:49.76ID:/uQ7pno7M
>>115
速度稼ぐために配列にしてるなら読み出し側もやるべき
2017/09/11(月) 07:48:20.80ID:y+HHQfcAp
>>116-117
うん
送信押して、あっと思った
しかも縦方向だと2次元配列じゃないとだめだったっけ?

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

課題と質問の意図がよくわからないけど
2017/09/11(月) 08:13:17.53ID:ngQru/Z5d
>>105
矢印の業務が空行の状態が問題文、矢印の行は君が書いた、と解釈した。

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

そういう問題じゃないようだが、高速化するなら、
Rangeを配列に代入
配列内で計算
配列をrangeに書き戻し
する。
2017/09/11(月) 08:14:49.10ID:ngQru/Z5d
>>119
(誤)矢印の業務
(正)矢印の行
スマン
2017/09/11(月) 15:42:49.07ID:cJ5w3XMz0
なんで君らは
>置換後の値の全角スペースを半角スペースに変換し
は放置なの?
2017/09/11(月) 20:27:23.15ID:X8qu52Lad
>>121
質問の仕方が悪いから、だな。

では>>119の2行目を
target=replace(temp, "◻︎", " ")
# ◻︎は全角スペースと読んでくれ
に変更。
2017/09/12(火) 02:00:32.49ID:qJTGUifI0
target=replace(temp, "全角スペースと読んでくれ", " ")
2017/09/12(火) 23:06:27.96ID:cxYAECV80
3万行前後ある列のデータの隣セルに、別シート5000行前後の列から、if条件に該当したものをループで貼り付ける処理をしているけど処理が遅い
3万行の列が外側ループi、5000行の列が内側ループjで回してる
処理時間短縮の為に、最初にiとjのデータを配列で取得して比較を行い
該当するものをセルに出力するように変更した結果、配列使用前より処理時間が短くなった
もっと処理時間を早くするにはどうすればいいかお知恵をください
2017/09/12(火) 23:14:30.57ID:e4D1CdNrx
>>124
5000がユニークデータなら
コレクション
2017/09/12(火) 23:23:18.75ID:hrwgqvSF0
>>124
別シート5000をディクショナリーに放り込んで、引いてくれば良いんでない?その手の話で高速化したいなら二重ループはナンセンス。
2017/09/12(火) 23:27:05.41ID:aYCmToqI0
>>124
条件と出力形式が分からないからハッキリとは言えないけど、
もし該当したものを都度吐き出しているなら、結果自体を配列にして最後に吐き出す様に直すと早くなるはず。
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/

アルゴリズムだけ考えたらバイナリサーチより
ハッシュテーブルのほうが速そうなもんだけどな
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
ありがとうございます!
これは普通のキーワードでネットで調べてもヒットした記憶がないワードです
今後に活用させていただきます
2017/09/13(水) 00:32:10.56ID:/gH6Ji+W0
ハッシュテーブルはハッシュの算出方法で変わるからな
対象データに対して衝突が少なくて計算の軽いハッシュ関数じゃないと
2017/09/13(水) 00:58:34.20ID:SpyxPvDF0
>>129
配列とセルは相互に直接的なやりとりが出来るんで調べてみて。
いちいちループ回さなくていいから。

簡単に言えば

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

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

Range(範囲) = A

とすれば配列Aの中身が範囲に入る。
2017/09/13(水) 07:30:42.98ID:F7IQARkod
ネットでエクセルVBAを勉強中なんですがオススメ参考本とかないでか?
特にユーザーフォームを使って作業が多いです。
2017/09/13(水) 07:35:00.26ID:W36Ef0cBp
>>124
条件の内容にもよるけど、ワークシート関数のvlookupは使えないの?
2017/09/13(水) 08:14:57.58ID:6syv7XXEd
>>133
横からすまん。試してみりゃいいんだろうけど...
vlookup(ワークシート関数)って、マクロから使うメリットがあるほど速いの?
2017/09/13(水) 08:26:49.86ID:B5ndS4Fj0
お前VBAスレの自称初心者だろW
2017/09/13(水) 08:46:51.19ID:ldXoybWh0
>>134
試せよw

って言いたけど昔試験したから教えるわ
実はvlookupは参照範囲を広くしなければかなり早い
ただ2003の頃の話だから、今はどうかしらん
137107 (ワッチョイ 8a2e-NEns)
垢版 |
2017/09/13(水) 09:25:03.74ID:C9n8lcte0
たかがソフト買うのに個人情報を洗いざらい要求してくるセキュリティ企業って・・・
なんで俺の住所や電話番号がいるんだよ。なんに使う気だ

しかもダウンロードしようとしたら送ってきたパスワード
そっくりコピペなのにエラー出るじゃねえか
大丈夫かここ
2017/09/13(水) 10:51:59.22ID:mbz5MtUcM
会社紹介を見る限りまともじゃなさそう
ツールの中身も海外フォーラムに載ってるソースコピペしてたりしてな
2017/09/13(水) 12:27:02.45ID:SpyxPvDF0
標準のワークシート関数ってVBAで作ってある上に、色々な目的に使えるように冗長性があるから、
目的に対して最も効率的な処理方法であるという条件下だと処理時間は必ず

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

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

ただしワークシート関数とほぼ同じ機能をVBAマクロで実装するのが時間の無駄って事もあるので、
マクロ内でワークシート関数を利用するという状況を考えるのは難しくない。
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
2017/09/13(水) 13:09:42.32ID:Prl309L10
ワークシート関数は条件さえ整えばマルチスレッドで動くぞ
確実にVBAより早いわ
2017/09/13(水) 13:55:24.11ID:SpyxPvDF0
https://msdn.microsoft.com/ja-jp/library/office/bb687899.aspx

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

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

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

十分に最適化されたVBAマクロよりもワークシート関数の方が処理が早くなるって状況の具体例があれば参考になるんだけど、
そもそも目的が違うのもあってワークシート関数が重いからユーザー定義関数を作りましょうみたいなページしか見当たらない。
2017/09/13(水) 14:13:42.05ID:/h+OIrtOd
>>141,142
例えば、>>124の質問内容を試しに書いて動かしてみたら、90msecで終わった。これを「vlookup使えばもっと早くなる」と言われても、「別にこれ以上早くなくていいし」って感じ。
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(職場のクソマシン)だから、また今は違うのかもしれないけど。
2017/09/13(水) 14:23:19.54ID:W36Ef0cBp
FORのところ i=1 だね
手打ちなんで許して
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の方はヒットしない数字があるとエラー吐く。
もっとフェアなデータでやれば話は違ってくるかもしれないけど、この例だとワークシート関数の方が遅いね。
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++使って最適化してるから
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行目は式を消してる
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
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
2017/09/13(水) 23:54:00.93ID:qFUPeADD0
>>147
あー
> b = Sheet2.Range("A1:A5000").Value
でvalue(のみ)を配列につっこめるんか、あー

ありがとう(・ω・)ノ
2017/09/14(木) 00:05:19.65ID:QvPDzzeD0
>>124で処理時間高速化の質問させてもらった者です

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

みなさんが言われてるように、VBAでワークシート関数を使用した場合の処理時間は、
おなじみオフィス田中さんのページに、配列をセル範囲に出力するのと同じぐらいの処理時間が高速だと書いてありますね
3万行と比較する列データが、複数シートで複数列だったので、次回同じような処理を作成する時は
VLOOKUP用の一時シートを追加して、3万行の列を一番左の列の検索キーにして、比較列はVLOOKUPで取得する実装をしてみます
2017/09/14(木) 08:15:22.18ID:l8z8iklHd
>>153
分単位はかかり過ぎだと思うなぁ。
データや環境の違いがあるから、純粋に比較はできんだろうが、124の内容を素直に読んでコード書いて動かして見たが、100msecかからんかったよ。
ちな、
3万行のデータを配列1に丸ごと代入
5千行のデータを配列2に丸ごと代入
配列2から辞書を作成
配列1を先頭から順に見て、辞書に存在しない値を消す
3万行データの隣に配列1を丸ごと貼る
2017/09/14(木) 08:29:32.22ID:+i9FPPOB0
配列にして一括で読み書きする
これが全てだよ
2017/09/14(木) 10:18:54.39ID:dILqaQ/Ld
VBAにも新規参入者がいて20年くらい前の話題が新たになされるのにちょっと感動した
2017/09/14(木) 11:15:17.22ID:XfGri2Pk0
Windows10のアップデートでIEオブジェクトの挙動がまた変わったらしい?
データ収集とかしてる人はアップデートしない方がいいかも
2017/09/14(木) 12:34:44.93ID:MnqZaJ520
配列 オブ カリビアン
2017/09/14(木) 12:36:58.88ID:dILqaQ/Ld
この期にIEオブジェクトをわざわさ生成するやり方はやめたらいいと思う
2017/09/14(木) 12:39:57.29ID:IwoZ7QGd0
vbaでスクレイピングはねぇ
2017/09/14(木) 12:42:41.16ID:YtbuHggLa
>>157
EdgeではなくIEの挙動が変わったのか?
にわかには信じかたいが。
2017/09/14(木) 14:27:44.29ID:gZf88W9A0
あるシートに所属するプロシージャから
自分の所属するシートを参照するにはどうしたらいいのでしょうか?
プロシージャを他のシートにコピペしたら
コードを書き換えなくてもコピペ先のシートを参照するようなコードを
書きたいのですが
2017/09/14(木) 14:33:45.54ID:EP6SpHBt0
>>162
シートモジュールは、その中で完結する処理を書く場所なので、
シートを飛び越えた処理を行いたいなら標準モジュールに書くべき。
2017/09/14(木) 14:54:53.92ID:gZf88W9A0
>>163
いや、むしろシートを飛び越えないでほしいんですが
シートで完結した処理にしたいのでシート名や番号による
シートの指定を排除して、所属するシートのセルを参照したいのですが
検索して調べるとセルを参照する方法としては
シート名を決め打ちする方法ばかりが出てくるので困っているのです
2017/09/14(木) 15:38:59.34ID:lm5VBVU0M
Active Sheet とSheet名以外でSheet 特定できるんだっけ?
2017/09/14(木) 15:49:13.64ID:+i9FPPOB0
application.callerでチェックボックスの動きの判定をするようにしたらメチャ重いんだが、これなんとかならない?
2017/09/14(木) 15:52:46.83ID:IwoZ7QGd0
>>162
Sub foo()
Debug.Print Me.Name
End Sub

何故かthisworksheetは存在しない
Meを使う
2017/09/14(木) 15:53:31.32ID:IwoZ7QGd0
セルはもちろんこんな感じね
Sub foo()
Debug.Print Me.Cells(1, 1)
End Sub
2017/09/14(木) 15:54:13.48ID:IwoZ7QGd0
>>166
http://15g.jp/post-314/
これ使っても駄目_
2017/09/14(木) 15:57:20.47ID:+i9FPPOB0
>>169
なるほどイベント抑止か。
ありがとう、やってみる
2017/09/14(木) 15:58:45.31ID:EP6SpHBt0
>>164
シートモジュールに直書きする場合はSheetsの部分を省略してCellsやRangeから書ける。

シートを指定しない場合の振る舞いが、
標準モジュールではActiveSheet(見えているシート)だったものが、
シートモジュールではそのシートに限定されるという変化をするので併用する場合は注意が必要。
2017/09/14(木) 16:00:47.13ID:IwoZ7QGd0
標準モジュールに書いて、対象シートはsetした方がいいと思うけどなぁ
2017/09/14(木) 16:02:42.23ID:gZf88W9A0
>>167
ありがとうございます。
まさに求めていた回答です。Meとは気づきませんでした。
2017/09/14(木) 18:24:24.22ID:EcWTQGUxa
>>169
うへえ。
確かにそれは効果が高いが、それだけでOKとか、どんだけレベル低いんだ?

むしろ速度を意識したプログラム書いてる奴にとってはそれやっても速度なんて変わらんのだが。
2017/09/14(木) 18:59:59.93ID:IwoZ7QGd0
>>174
ではレベルの高い方法をどうぞ
2017/09/14(木) 19:19:27.73ID:VHoNboqWa
>>175
速度はコードによるから〜でOKなどというものじゃない。
別に、意識してコード書かなくても下記の後半部分にあるようなコードになる。
その上で速度を上げようと意識すれば一番最後のようになる。

http://excel-ubara.com/excelvba4/EXCEL228.html
2017/09/14(木) 19:23:47.78ID:NoiILVtJa
それで駄目ならマルチプロセスにする。
適用出来ないことも多いけどな。
objEx1=CreateObject("Excel.Application")
を複数作ってそれぞれに独立した計算をさせる。
2017/09/14(木) 19:34:05.01ID:IwoZ7QGd0
>>176
ありがとう、ここまで出来るとは思わなかった
他にも関数で高速化極めてて驚いたわ
良いものを見れた
2017/09/14(木) 20:04:51.07ID:EP6SpHBt0
シート作ったりセルに書き込んだりというエクセル側の操作をすると、
その度にイベントが走ることになるから、これを如何に抑えるかってのが重要なんだけど、
最初から全部覚えようとするとパンクする。
2017/09/14(木) 20:30:17.25ID:8w8A3LKI0
どんだけ頑張ってコード書いても、大量の演算は結局ピボットの方が高速なんだよな
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時間ほどで納得行かない遅さなんです
2017/09/14(木) 22:14:39.02ID:IwoZ7QGd0
>>181
ファイルを上げてくれないか
実際に試してみないと分からん
2017/09/14(木) 22:16:42.03ID:EP6SpHBt0
>>181
そのコードの処理を見る限り、早くする方法はいくらでもあるけど、
処理がくっそ遅いMatch関数使って何かやってるんだから処理速度的にはそんなもんじゃないの。
2017/09/14(木) 22:18:51.12ID:CAJlFz9z0
何をするプログラムなのか最初に書いてくれないと、どこを観点に見ればいいかわからない

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

つーか、>>124と同じ課題か?
2017/09/14(木) 22:22:13.96ID:/NzRhjzgM
>>182
仕事用なんですいません…

>>183
MATCH関数遅いんですか?
元は3万行のシート回してたけどそれも遅かったんでMATCH関数使ったんですが
2017/09/14(木) 22:33:58.37ID:EP6SpHBt0
もしかして学校課題か何かか。三万行って。
2017/09/14(木) 22:37:11.21ID:XVFgKdZv0
MATCHもmatch_typeに1か-1を指定した時はバイナリサーチだから遅くないよ
0を指定してるとリニアサーチだから件数に比例して遅くなる
2017/09/14(木) 23:03:43.05ID:XSiUnmrc0
学校の課題なら手伝わんぞ、それはカンニングだw
2017/09/14(木) 23:08:26.96ID:6XISNqi7M
>>186
駆け出しのマです

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

仕事だから検証に時間さくわけにもいかないけど納得行かないんですよね
連休に試してみますね
2017/09/14(木) 23:20:59.58ID:IwoZ7QGd0
>>189
上司に聞いてみたら?恒久的に超早くなりそうなんで何時間か遊ばせてもらえませんかって
家でも研究中といえば良い
俺が上司なら、ルーチンワークは最優先で効率化させるけどな
2017/09/14(木) 23:22:39.03ID:XSiUnmrc0
マ?
クベ??
2017/09/14(木) 23:37:20.66ID:EP6SpHBt0
仕事でプログラマやってんなら、それこそ会社に理解があろうがなかろうが検証時間取れないなんて事はないだろう。
どっちにしろ>>124と条件が被ってるんで>>147のtest2を参考に作り直せば速度的にはどうにかなるんじゃないの。
2017/09/15(金) 00:05:39.06ID:N1D7768S0
緑郎?
2017/09/15(金) 05:58:01.90ID:mR9ZEtfo0
駆け出しママ?
2017/09/15(金) 12:58:58.26ID:DPkC9aElx
>>172
オブジェクト変数多用は速度低下の一因になるぞ
2017/09/15(金) 13:29:55.54ID:+lt7NDiE0
駆け出しのマトリ?
2017/09/15(金) 17:41:48.27ID:YuOtTZO+d
表示シートのセルA1に『SD11』と入力してからコマンドボタン1を押したらマスターシートのA列をFINDで検索かけて下に一行ずつ表示シートの項目別にそれぞれ転記するにはどうすればいいですか?
検索まで出きるんですが、転記とループのやり方が分かりません。
https://i.imgur.com/Bd3WIPk.jpg
https://i.imgur.com/3IPhNPk.jpg
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

みたいな形で空白を埋めるようにして。
2017/09/16(土) 07:57:41.80ID:CZKDCudP0
どっちがマスターシートかすらわからないのは俺だけなのか?
2017/09/16(土) 08:55:03.94ID:8PfQF6Zm0
動物記を書いた方
2017/09/16(土) 08:57:29.36ID:0Tj0yPF60
それはファーブル
2017/09/16(土) 09:10:57.56ID:ZdfhdKJM0
シートンさん、涙
2017/09/16(土) 11:39:45.69ID:NmFgsGO20
>>201
父をたずねて三千里の旅に出るよ...


昆虫記
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なんだ?
2017/09/16(土) 19:17:26.63ID:gf/ZkNkm0
>>204
WIndow作ってWM_PAINTで描画(GDI/GDI+)
Excelで直接やらなくてもいい気がするけど
2017/09/16(土) 21:10:59.05ID:XK5pYCg9a
>>206
昔、そういうプログラム書いてたな。
CreateCompatibleDCとか。

GDI+はステータスバーの数字を取得する為に使ったことがある。
よくあるウインドウハンドルから取得する方法やUIAutomation使う方法で取得出来なかったんで直接Bitbltかなんかで描画してるとしか思えなかった時に。
2017/09/17(日) 15:05:48.02ID:QbcXsmvT0
vbaでpdfをこのようにバイナリ変換?して仕事で使うサイトにpostしたいのですがどうすれば変換できますか?
https://imgur.com/iztKsA6.jpg (普通のブラウザで送信した際の通信データを出力したもの)
ググった結果出てきたバイナリ変換?は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
2017/09/17(日) 15:23:31.58ID:EJ9y/eYt0
>>208
pdfは元々バイナリファイル
それをテキストエディタで開けばその画像みたいになる
エディタで開く時のエンコーディングが違えば文字化けの見た目も変わる

postするときになんで変換しないといけないの?
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しているデータです
https://i.imgur.com/0LlxHf3.png
明らかに文字化けの雰囲気が違うこれだと投稿したpdfを開こうとしても「画像データに不足があります」と出てpdfが開けません
postデータは同じツールで表示していますのでvbaでの変換の方法に問題があるのかと思ってます
>>208の画像がこの画像と違ってどういう形式?なのか分かれば調べようもあると思うのですがいかがでしょうか
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が開けなくて、
送信データももっとひどい文字化けになってしまい諦めてました
https://imgur.com/p1huKGY.jpg
unicodeで送信しているのを調整する必要があると書かれていたのですがそれが原因でしょうか・・・

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

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

説明が下手で申し訳ないのですがどなたかアドバイス頂けたらと思います
2017/09/18(月) 11:37:33.30ID:d9P11nJN0
セルB4から始めて、右に8列‘’○‘’を順番に書き込んでからB5に下がってまた8列書き込む。それを10行繰り返すにはどういうコードになります?
2017/09/18(月) 12:09:05.81ID:Y2wXgXiBx
>>214
Forで二重ループ
Cells(5, 2)から始めて必要な列数だけ○を書き込む処理を10行分行うだけ
2017/09/18(月) 12:10:08.02ID:Y2wXgXiBx
>>215
Cells(5, 2)から始めて→Cells(4, 2)から始めて
2017/09/18(月) 12:28:31.10ID:XMy/3GFW0
ネットワーク上のフォルダにファイルを保存する時、
初回時のみ若干保存に時間がかかります。
一度実行したあとにすぐ実行すると、
既にネットワーク接続が確立しているからなのか、比較的早く保存できます。
保存は普通にsaveasで、UNCパスで保存しているのですが、
この初回保存時に時間がかからずに保存できる方法ないでしょうか。
2017/09/18(月) 12:39:51.48ID:QSt8wYFod
>>214
「セルB4から始めて、右に8列‘’○‘’を順番に書き込んでからB5に下がってまた8列書き込む。それを10行繰り返す」コード。
2017/09/18(月) 13:39:45.60ID:d9P11nJN0
>>215
>>218
ありがとうございます。頑張ってやってみます。
2017/09/18(月) 15:00:22.35ID:7Xxpypu9a
>>217
VBAの問題じゃなくてネットワークやSMBプロトコルの問題じゃないかなあ。
或いは名前解決問題も含んでいるとか。
2017/09/18(月) 15:03:30.32ID:7Xxpypu9a
>>219
全部"○"なの?
Range(B4:I13).Value="○"
じゃ駄目なの?
2017/09/18(月) 15:33:37.57ID:iDSQnxIm0
http://imgur.com/MSCp7vw.jpg

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

イベントプロシージャで名前変更時にマクロ起動は出来ました
名前検索&シートを跨いだコピペがどうしても出来ないのでご助力下さい
2017/09/18(月) 16:32:44.21ID:tGO6qMv20
>>222
Accessでデータ管理してSQLで取り出すのが一番苦労がないと思うんだが。
2017/09/18(月) 17:38:30.84ID:zFeh6Anl0
>>222
普通にVLOOKUPで引っ張ってくれば
マクロは必要ないのではなかろうか。

どうしてもVBAでやりたいなら
WorksheetFunction.Matchで検索してみよう。
シート間コピペはRangeの前にワークシートオブジェクトを指定すればできます。
範囲でやる場合はValueを書かないとだめです。
Worksheets("シート2").Range("*:*").Value = Worksheets("シート1").Range("*:*").Value
実際には決め打ちじゃなくてCellsで検索結果に応じて可変にすればよいでしょう。
2017/09/18(月) 18:28:54.10ID:gz3Qfpmld
>>221
実際には別シートの値をみて条件付けてYESなら右に一個ずつ値を引っ張りたいだけです。
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は諸事情で使えません
2017/09/18(月) 20:45:41.88ID:d9P11nJN0
この小汚いコードなんとかなりませんか?
https://i.imgur.com/PH6sTKr.jpg
2017/09/18(月) 20:58:13.91ID:jDUrs+BF0
>>227
まず写真じゃなくてプリントスクリーンで
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行だけでいけるはず。
=の右辺と左辺が同じ大きさの範囲である必要あり。
範囲は実際のシートのに書き換えてお試しを。
2017/09/18(月) 21:26:16.39ID:d9P11nJN0
>>228
パソコンのネットがゴミ過ぎてパソコンからは書き込めないんです...
2017/09/18(月) 21:38:27.20ID:zFeh6Anl0
>>227
応用シートを変数に突っ込む
WithにRange指定まで突っ込む
RangeをCellsにして列参照を変数にする
オフセットの数値を変数にする
これでループで変数をインクリメントしていけばスッキリしそう。
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

設計が腐ってる臭いがするので、小手先直したところで意味ないと思うけど。
2017/09/18(月) 21:46:33.83ID:iDSQnxIm0
>>229
うおおおおおお
その1行だけで動きました
ありがとうございます

マクロ記録ではなくググった記述の真似ですが検索が下手だったみたいです
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

でもエラーが出てしまいます・・・。
2017/09/18(月) 21:59:25.32ID:jDUrs+BF0
>>234
何でそんなことやってるか知らんけど…

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

とりあえずイミディエイトウィンドウやウオッチ士気で、
UserForm2.Caption
に何が入ってるか見てみたら?
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
こんな感じです。
パソコン見ながら打ったので間違って打ってたらごめんなさい。
2017/09/18(月) 22:04:38.56ID:jDUrs+BF0
〃応用〃
なんかかわいい
2017/09/18(月) 22:05:45.55ID:jDUrs+BF0
>>236
とりあえず>>232以上の回答はないと思うぞ
2017/09/18(月) 22:09:21.04ID:d9P11nJN0
>>232
ありがとうございます。すごい助かります。感謝です!
2017/09/18(月) 22:09:42.61ID:d9P11nJN0
>>238
はい。ありがとうございました。
2017/09/18(月) 22:09:56.31ID:m1CRg0zL0
>>235 ありがとうございます。 他のユーザーフォームではできましたので、USERFROM8自体がおかしくなっている?
直前にエクセルが動作停止しました。その際に壊れてしまい、USERFORM8のオブジェクト名を理解できていないようです。
そんなことはありますでしょうか?
2017/09/18(月) 22:13:12.43ID:jDUrs+BF0
>>241
さーねぇ。まぁあるかないかならあると思うけど、安易に答えは出さないけど、
どうでもいいマクロならさっさとuserform8消して新しく作り直すほうがいいかもな
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の後ってカッコ無しでスペースだよね。
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使って繰り返しが使えるよね。
まあ、真ん中だけ少し違うから恩恵少ないけど。
2017/09/18(月) 22:45:05.41ID:jDUrs+BF0
>>244
sublimnetextとか使ってみてはどうだろう
コピペするだけであら不思議、自動インデント
https://i.imgur.com/rexlwm0.png

VBEと連携できたら便利なんだけど、残念ながらできない
2017/09/18(月) 23:05:45.45ID:xepoeGeEa
>>245
自動でやるならmougでsmart indenter紹介してたな。
多分連携できるはず。
2017/09/18(月) 23:28:32.94ID:jDUrs+BF0
>>246
うお、こんな便利なもんあったのか
ありがとう早速試してみる
2017/09/18(月) 23:32:57.67ID:2tW0i3mn0
>>221
それはテクニック。質問者は
「セルB4から始めて、右に8列‘’○‘’を順番に書き込んでからB5に下がってまた8列書き込む。それを10行繰り返す」方法を訊いている。
2017/09/19(火) 08:03:42.97ID:S/ELy/wxd
学習指導要領的なアレ
2017/09/19(火) 08:41:07.80ID:TQtJdwms0
>>248
でも二重ループでセルを回すとか、実際にはやらない、というかむしろやっちゃいけないようなこと質問されてもね
2017/09/19(火) 09:07:55.93ID:llsJeX6S0
>>250
やっちゃいけないってなんだよw
foreach in rangeって言いたいんだろうけど、excelは行列の削除があるから二重ループでいいだろう
セルじゃなければforeachでいいけどな
2017/09/19(火) 11:43:23.74ID:3hwVeuBP0
列数 = 8
行数 = 10
Range("B4").Resize(列数, 行数).Value = "○"
2017/09/19(火) 12:11:26.47ID:JjVbyw/1a
>>248
初心者は設計に問題がある場合が多いわけで。
真面目に回答してもすったもんだして結局>>221が採用されることも多い。
質問の仕方もダメダメな場合が多いから、回答も段々きつくなる。

>>251
すべきじゃ無いのはむしろセル回す方だと思うが。
配列からの一括挿入にすべきだろ。
254デフォルトの名無しさん (オッペケ Sr4d-ZzG1)
垢版 |
2017/09/19(火) 12:22:40.32ID:hROBZ5mLr
問題もクソもこういう場合質問者はループを回したいなど微塵も思ってない
無知ゆえに質問の仕方がぎこちないだけだ
教えたがりならそれくらい察しろよ
2017/09/19(火) 12:37:00.77ID:k/2scTwdd
二重ループってのもある種のテクニックだから、そのやり方を訊いているのかも知れん。for nextでカウンタiとjを使って...とか。
そうでないなら、例えば、同様の効果を得る処理時間の短い方法を知りたいなどと訊くべし。
2017/09/19(火) 12:58:00.95ID:JjVbyw/1a
>>254
それを察したから>>221を書いたんだろ。
したら>>248の突っ込みが入って今に至ると。

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

質問でRange("K15:O20")などと出てくるだけでガッカリ。
その範囲は今問題になってるお前の表そのものだろと。
結局貰ったコードそのままコピペして使うんだろうなと想像ついちまう。
2017/09/19(火) 13:16:12.83ID:GpDcdeuu0
「何をどうすればいいのか見当がつかない」というのは根本を理解していないが故だしな。

それにVBAはだいたいネット検索すれば解決策が載ってるんで(凡例が少ないという事はあるけど)、
自分で解決してから「こういう方法以外にどのような解法があるか」と聞いてくるのが一番正常なのかもしれないね。
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ですか?
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の列にそのデータが貼り付けされる
っていうのを作りたいです
http://imgur.com/gMJqp1I.jpg
2017/09/19(火) 23:46:09.19ID:awnco+f70
なんで(R1C1形式じゃなくて)A1形式なんだろうなぁ。あれ(A1形式)って感覚的に分かるの?
264デフォルトの名無しさん (ワッチョイ 398b-ZzG1)
垢版 |
2017/09/19(火) 23:54:26.79ID:r8s5qxxU0
バカはいつも突然やってくる
2017/09/19(火) 23:54:28.98ID:llsJeX6S0
>>262
とりあえず写真じゃなくスクリーンショットで頼む
モアレになって鬱陶しい

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

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

誰も作って無かったら明日の夜作るよ
2017/09/19(火) 23:55:49.42ID:llsJeX6S0
>>263
分からん。全然分からん。
ただ既存のシートにマクロでclearcontentsする時はA1形式にする事はよくある
2017/09/19(火) 23:56:24.26ID:GpDcdeuu0
>>262
GUIいじりはエクセルVBAの守備範囲外だからやめたほうがいい。

リボンを改造して専用のボタンを用意する方法があるので、
そこからフォームを呼び出してツールであるかのように見せるのが限界。
268デフォルトの名無しさん (スプッッ Sdf3-uHQa)
垢版 |
2017/09/20(水) 00:01:43.09ID:+p3KI42td
>>265
ありがとうございます
スクショは今は撮れませんが明日できれば撮ります
2017/09/20(水) 00:23:48.32ID:mkPuPLWs0
デジカメでモニターを撮影するのだって広義のスクショなんだけど
むしろ初期はカメラをモニターの前に置くしか方法がない場合が大多数だった
2017/09/20(水) 00:33:24.59ID:rbLHucI/0
変な作り話しなくても、会社とか学校のPCとかで内部データ持ち出せない場合は、
そういう風にするしかないって擁護すればいいんじゃないの。(その場合でも画面の写真撮るのは拙いけど)
2017/09/20(水) 08:10:47.54ID:pHDT776b0
>>262
出来たわ
テキストボックスに入力するとB列で絞込表示
1500件ぐらいなら多分軽い
https://www.dotup.org/uploda/www.dotup.org1370604.zip.html
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
しかもコードは小学生の初めてのプログラミングレベルだぞお前
2017/09/20(水) 21:37:54.27ID:sWNWre39x
>>274
スゲー承認しました
276デフォルトの名無しさん (スプッッ Sdf3-wsdZ)
垢版 |
2017/09/20(水) 22:21:19.53ID:JB1iCPlvd
ちなみにこんなのが出来ました

B5をダブルクリックすると画像のように検索フォームが出て来る
フォームにabと入力してエンター押すとabを含んだリストが出て来る
http://imgur.com/qzmxOJp.jpg

リストのabdをダブルクリックするとB5にabdが貼り付けされて検索フォームが閉じる
http://imgur.com/jVKEH0a.jpg

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

VBAというかプログラミング初めてなので勉強になりました
みなさまありがとう
2017/09/20(水) 22:31:46.25ID:pHDT776b0
>>276
乙。よー頑張った
こういう報告は嬉しいもんやね
2017/09/20(水) 23:02:00.90ID:1NkuNAa7a
>>274
初心者の人?
今回の質問自体が簡単な部類だけど、それでも俺の書いたコードが非難されるようなものかどうかも区別つかないの?

批判にも具体的な指摘が全く無いし。
2017/09/20(水) 23:22:24.26ID:rbLHucI/0
>>278
以前から居る病気の人だから構わないであげて
VBAのコードが読めないのに何故かこのスレに張り付いてんのよ
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

そもそもお前のクズコードなんぞ批評の土台にすら登っとらんわ
のぼせ上がんのもいい加減にしろクズ
2017/09/21(木) 00:04:37.10ID:OcnLMsdka
>>281
例えばね、>>276のリンク先の人のコ−ドを見ればすぐに、そこそこ書けると分かるのよ。
書ける人ってのはコード見ればその人の力量がすぐ分かるもんなんだ。

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

残念だが、君はとっても恥ずかしい人だ。
というかね、煽るだけで具体的な内容が無い。
どこが悪いか全く言及出来てないのが笑える。
2017/09/21(木) 00:07:50.25ID:GdqtYoiF0
こんな華やかなコメントアウトって使う?
'*********:*********:*********:
' このプログラムはaでbです
'*********:*********:*********:
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
2017/09/21(木) 00:26:32.97ID:OcnLMsdka
>>283
???
使う人もいるでしょ。
俺も使う時あるし。
こんなのも使うな

' /////////////////////////////////////////////////////////////////////////////////////
' //#名称 Auto_Open
' //
' //#概要 ブックを開いたときの処理(Excelの特殊関数)
' //
' //#引数 なし
' //
' //#戻値 なし
' //
' //#解説
' //
' //#履歴 2017/09/21
' // Coded by Hogeta Hogeo
' //
' /////////////////////////////////////////////////////////////////////////////////////
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
2017/09/21(木) 07:36:17.84ID:JiFdzG0np
ここまで具体的な指摘なし
2017/09/21(木) 07:48:27.04ID:GdqtYoiF0
>>285
あぁ、そういう風に使うのか、ありがとう
2017/09/21(木) 08:27:55.66ID:Fp/Plhwox
>>281
スゲー承認しました
2017/09/21(木) 08:28:32.33ID:Fp/Plhwox
>>287
スゲー承認しました
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に値を入れようとしてもエラーが出ます
2017/09/21(木) 18:42:41.24ID:w3PiJp4aa
>>293
そもそも、どうしてRowSourceにこだわってんの?
君のやりたいことでは必要無いと思ってたんだが。

RowSourceってのは融通が効かないから自分は基本使わないんだが、エラーになってるとしたらRowSourceとAddItemが共存出来ると思ってるとかかな。
RowSourceはシートの指定範囲のデータをリストにするもので、そこに追加やそこから削除は出来ない。
指定範囲のデータだけでリストは完結することになる。
そこでそのリンク先でも絞り込みの前に.RowSource=""を入れてる。
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
2017/09/21(木) 22:38:43.69ID:JiFdzG0np
依然として具体的な指摘なし
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
2017/09/21(木) 23:55:14.64ID:u5EL98RNa
>>299
小学生でもお前のレベルは低いと言うことは出来る。
本当に自分の方がレベルが上かを示さなくて良いならな。

それがお前だ。
技術的要素無しであの葡萄は酸っぱいと言ってるキツネのようだ。
2017/09/21(木) 23:57:08.45ID:u5EL98RNa
本当に、何言ってるか理解出来ないから、振った話には一切言及出来ない。
こういう所でレベルが透けるんだよなあ。
302デフォルトの名無しさん (ワッチョイ af8b-bXGz)
垢版 |
2017/09/22(金) 00:05:31.90ID:XNPiuLNV0
もうなりふり構ってられなくなったなw
いいよその調子w
2017/09/22(金) 01:17:48.87ID:TDU45J/zx
>>299
なんで相手してるんだ?
2017/09/22(金) 02:57:45.48ID:zgKhpRaR0
久しぶりにこのスレ戻ってきたけどまた随分荒れてるね。

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

そんなことより変更に対して厳しく、追加に対しては寛容になるような作りにするような
もっと基本的なことを念頭におくようにした方がより効率的に改修出来たりするよ。
305デフォルトの名無しさん (ワッチョイ af8b-lQLN)
垢版 |
2017/09/22(金) 07:49:01.52ID:XNPiuLNV0
また教えたがりが一匹ふえたw
2017/09/22(金) 08:36:54.40ID:q9/2ZYK50
質問スレに質問と回答以外の事を書き込むなよな
2017/09/22(金) 10:26:04.56ID:BmGv97NWd
まず>>306が質問でも回答でもない時点で何を言っているんだーおまえわー
自分だけは特別だと思ってる自意識過剰かー
単なるバカなのかー
2017/09/22(金) 10:44:51.56ID:FdbOU1iGr
VBAに高階関数ってないんすかね?
2017/09/22(金) 11:45:21.15ID:JBjlrBKTd
>>308
条件に応じて関数を選択してそれのAddressOf値を返すことはできるから
強いて言えばあると言えばあるね
2017/09/23(土) 05:57:25.45ID:3crN9LRXa
>>306
ぁあ?
だったら昔みたいにガッチガチにルールで縛りつけたスレ立ててそこで1人でやれやボケ
2017/09/23(土) 09:39:55.56ID:hX9NlXapa
ルールで縛らないで良いなら質問と回答以外書き込むなと書くこともアリだろ。
アホなこと書いても良いが、その分そいつが批判されるのも仕方ないということ。

アホな初心者がかつて批判されたことを根にもって相手の力量も分からずに噛みついてるんだから批判されても仕方ない。
2017/09/23(土) 09:50:48.00ID:3ppsxCRMr
>>309
すんません、表現が良くなかったです。
mapとかfoldとかfilterとか、それらに付随してラムダ式とかです。
調べたけどなさそうですね。MSさん、用意して欲しいな、、
2017/09/23(土) 11:22:54.85ID:ck0qiPja0
VBAにラムダ式を望むなよ
2017/09/23(土) 12:43:51.76ID:s+vr+Saza
>>311
VBAみたいに片手間でやるような言語のスレで
初心者って言われてもなぁ
2017/09/23(土) 12:55:31.84ID:dWsmcDp10
>>312
filterってなに?
2017/09/23(土) 12:58:26.11ID:pHSma+nnM
2ch初心者か?
肩の力抜けよ
2017/09/23(土) 13:44:03.04ID:dWsmcDp10
>>312

これ見て理解した
http://www.cse.unsw.edu.au/~en1000/haskell/hof.html
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]とか。
2017/09/23(土) 13:50:46.59ID:HcxyMvzb0
>>317
まさにそれですね。
2017/09/23(土) 14:02:25.24ID:dWsmcDp10
Haskellは三日坊主で終わったとはいえヤバい
2017/09/23(土) 14:09:02.53ID:BetVnWHy0
EXCELはシートにSQLが使えるから場合によってはそっちの方が使えるのでは。
LINQやラムダ式でガッツリやりたいのであれば
もうEXCELの範疇を超えているので
.netでentityFreamworkとか使ってやった方がいいと思うよ。
2017/09/23(土) 15:07:07.52ID:HcxyMvzb0
>>321
ありがとう、調べてみます。
2017/09/23(土) 17:39:07.55ID:6qmI5T+w0
do while not eofと do until eofは同じですか?
2017/09/23(土) 18:26:20.13ID:hvHU1vjm0
>>323
同じじゃないと思える根拠を書いてくれないか?doの後じゃなく
Loopの後に条件を書いたらそりゃ違うだろうけど。
2017/09/23(土) 18:38:13.30ID:6qmI5T+w0
>>324
ありがとうございます
同じことでも言い換えられるんですね
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扱うなら覚えておかないとはまるぞ
2017/09/23(土) 19:31:29.38ID:ljq3IKQ50
Notはビット反転だから真偽値以外だと挙動が変わるわな。
Nullは色んな判定を挟む前にFalseを返す仕組みのはずだから、また問題が違うような気もするけど。
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) であるとみなされます。
ってかいてあるだろ
2017/09/23(土) 20:57:28.95ID:hvHU1vjm0
>引数 condition は偽 (False) であるとみなされます。
自分で答えを書いているように思うが。
2017/09/23(土) 21:10:26.95ID:ljq3IKQ50
俺が「Falseを返す」と表現したのが悪かったな。
「Nullが含まれる式は必ずFalseとして判定される」と書かなきゃいけなかった。
2017/09/23(土) 21:13:02.41ID:dWsmcDp10
関係ないけど Not 1 が False 扱いにならないのは地味に不便だ
2017/09/23(土) 22:09:48.51ID:paUCbsLX0
>>330
それが分かってれば問題はないんだけど、分かってても勘違いしたりするからなぁ
Nullの扱いが直感的じゃないってのが最大の敵

>>331
VBAのTrueは-1だからな
Not -1とかNot CBool(1)とかならFalse扱いだし
2017/09/23(土) 22:56:39.62ID:7cmO2hJI0
vbaとExcelで数値とbooleanの変換が変わるのは怖い
2017/09/24(日) 00:06:38.99ID:CZiBIXmW0
きっと〜、あなたは もどってくるだろぅをー
335デフォルトの名無しさん (ワッチョイ af8b-bXGz)
垢版 |
2017/09/24(日) 02:19:39.33ID:3BjqQEbI0
ハイ戻ってきましたぁ!
また調子こいた教えたがりがしゃしゃってんのか?
バカはどいつだ?
2017/09/24(日) 03:07:22.68ID:2VO5tOtwe
∧_∧
( ´・ω・)
( つ旦O
と_)_)
2017/09/24(日) 08:32:58.01ID:wIEwKcgM0
>>331
Not 1と書くシーンがわからんが、素直に(?)Not TrueとかFalse とか書けば?
2017/09/24(日) 08:50:08.02ID:y7FzpsGf0
ドイツの技術は世界一ィィィ
2017/09/24(日) 08:51:55.94ID:sE41CGP30
Not Trueは新しいな
2017/09/24(日) 08:53:02.43ID:sE41CGP30
ツール→参照設定で全てを参照する方法はありますか?
2017/09/24(日) 09:43:55.42ID:SDtHFGLja
>>314
ここで言われてる初心者ってのは殆どの場合、他の言語も初心者ってことだぞ。
技術的に初心者だから初心者と呼ばれてる訳じゃない。
自分の画面を見ることが出来ない相手にも伝わるように書くとか、条件を小出しにするとか、相手をロボットか何かと勘違いしてるような初心者以前の問題が有るから否定的な意味で初心者と言われてる。

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

内容が何ーつ無くて罵倒しか出来ない初心者君の真価が問われてる。
2017/09/24(日) 09:51:58.93ID:gFeQddMX0
>>341
> 内容が何ーつ無くて罵倒しか出来ない初心者君の真価が問われてる。
ブーメラン w
2017/09/24(日) 10:06:08.42ID:wIEwKcgM0
>>339
ワシにとって Not 1はNot true程度には奇抜や
2017/09/24(日) 10:11:23.30ID:gFeQddMX0
Not 1 は普通に使うけど?
LSB だけ変更したい時とか
2017/09/24(日) 10:26:12.50ID:J5lzydll0
「Not 1」と直接書くわけじゃなくて0/1を返す関数の返り値に対してのことだろ
2017/09/24(日) 10:29:39.61ID:D9ok3B4cd
>>344
うむ、ただ>>331は「Not 1 が False 扱いにならない」事を嘆いて(?)いるから、君とも意見が合わないかも知れない。
2017/09/24(日) 11:00:50.23ID:gFeQddMX0
>>346
>>343に対するレスだから
2017/09/24(日) 11:49:34.08ID:SDtHFGLja
>>342
内容あるじゃねーか。
日本語も理解出来ないほど無能か?
2017/09/24(日) 12:09:02.98ID:gFeQddMX0
>>348
スッカスカの内容あるとか言われてもなぁ w
2017/09/24(日) 12:51:48.98ID:sE41CGP30
>>349
君のレスには内容ないけど、Sa6b-XzByは内容のあるレスをし続けているぞ
2017/09/24(日) 13:05:01.11ID:/081jZZtM
>>350
し続けてる?
>>348に内容あるとかバカなの?
2017/09/24(日) 13:52:50.28ID:SDtHFGLja
>>349
>>351

バーカ。

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

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

この違いも分からないから無能と呼ばれるんだよ。
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
2017/09/24(日) 16:43:54.18ID:vk2rgPVS0
この罵倒しかしないヤツはVBAコードの一つも読めないのに何年も前から張り付いている本当の意味での異常者で、
どうも現実の生活で誰にも構ってもらえないからネットで罵倒を繰り返してレスポンスをもらって喜んでいるみたいなので、
各員は餌を与えないでください。いつまでも無意味なレスがついて荒れるだけです。

対策として「晒したコードに対し具体的なコードをつけて指摘しているもの以外は相手にしない」っていうテンプレでも追加してほしい。
2017/09/24(日) 16:48:20.79ID:jWeMnfEta
>>354
ほら、やっぱり内容がまるで無い。
小学生と変わらん。
2017/09/24(日) 16:53:01.46ID:jWeMnfEta
>>353
スレ見てれば分かるだろ。

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

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

相手のどこが悪いのか全く言及出来ない奴は何も言ってないのと同じこと。
2017/09/24(日) 16:54:20.86ID:sE41CGP30
>>343
すまん、どっちも始めて見た
1をbooleanにするのはテストでifを書く時だけだな
if 1 then

ってこれ間違ってた事に今気づいたわ。本来なら
if -1 then
だったわ
2017/09/24(日) 16:59:29.20ID:J5lzydll0
そんなことより、
0以外の数値をTrue扱いしたいのに、
If Not x が IfNot (x)じゃなくて If (Not x) なのが非常によろしくない
2017/09/24(日) 17:04:51.18ID:J5lzydll0
>>358
いや、
If 0 Then

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

少し直観と食い違うのは Not が絡むとき
2017/09/24(日) 17:05:32.05ID:jWeMnfEta
>>358
コメントの代わりに
#If 0 Then
は昔よく使ってたなあ。
最近は全く使わなくなった。
Not 1もNot TrueもIf -1 Thenも使ったこと無いな。

こういうのはその人の趣味というか癖みたいな問題だわな。
どれが良いとか悪いとかの問題じゃない。
2017/09/24(日) 17:08:48.88ID:vk2rgPVS0
しかし言うほど

If Not [Integer] Then

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

If Not Book Is Nothing Then

みたいな書き方はするけど、数値でNot使う事自体あんまりない気がする。
2017/09/24(日) 17:09:54.28ID:3B64fACL0
MS系のBASICはずっと昔から「0」と「0以外」で真偽を判定するから、論理式では1もNot 1もありえない
もちろん-1なんかも使わない
俺の知る限り、約40年前に発売されたN-BASICの時代からこの仕様は変わってない
2017/09/24(日) 17:11:40.94ID:gFeQddMX0
>>357
だからいちいち相手するなよ
おまえの内容とやらもたいしたこと言ってないんだし
2017/09/24(日) 17:14:57.98ID:gFeQddMX0
>>359
> If Not x が IfNot (x)じゃなくて If (Not x) なのが非常によろしくない
それ一緒だろ w
C言語みたいに論理否定(!)があればいいだけの話
2017/09/24(日) 17:20:20.54ID:sE41CGP30
>>362
数値型にnotは使ったこと無い。特に言語によってfalseが変わるから怖くて使えない
後者は普通に使う
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
2017/09/24(日) 17:29:31.46ID:jWeMnfEta
>>364
俺の書いた回答に対してアホが罵倒したのが最初だよ。
お前の書いた>>344なんて初心者でもやらんわとでも言われたら頭来るだろ。
2017/09/24(日) 17:30:59.09ID:gFeQddMX0
>>366
True ならわかるけどFalseが0以外の言語ってあったっけ?
2017/09/24(日) 17:34:26.89ID:gFeQddMX0
>>368
単にビット演算の必要がなかっただけなんだろうなとしか思わん
まあ内心でレベルひくって思うけど w
2017/09/24(日) 17:38:18.30ID:jWeMnfEta
>>370
俺はそれなりの奴から根拠ある批判をされた場合は何とも思わん。
びっくりするぐらいレベルの低い奴から根拠の無い批判をされた時は赦さんね。
2017/09/24(日) 18:38:38.48ID:yAXo7hpi0
>>358
だろうな。ワシも書いたの初めてや。そのレベルの奇抜さって事。
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

あ、後もう一つ、お前はもうしゃべるな
2017/09/24(日) 20:10:34.74ID:gFeQddMX0
>>373
> isSomeStatusが整数を返す関数のとき
なら
> If isSomeStatus(x) Then 〜
なんて書かないで
If isSomeStatus(x) <> 0 Then 〜
って書く
2017/09/24(日) 20:15:55.53ID:yAXo7hpi0
>>373
無い。つか、そう書かない事を理想としている。
変数も定数もプロシージャも型を意識するようにこころがけている。
2017/09/24(日) 20:21:50.61ID:vk2rgPVS0
使ってるうちに関数の返値型は暗記するし、そもそも一度は確認するだろうから、
真偽値以外でNotをうっかり使うというケースはあんまりなさそう。

というかうっかりNot 整数をやっちゃったぜって事ならイミディエイトウィンドウで確認する癖を付けた方がいいと思う。
2017/09/24(日) 20:22:09.47ID:J5lzydll0
>>375-376
なるほど
2017/09/24(日) 20:25:18.45ID:J5lzydll0
組み込みの Is〜 が As Boolean になっているけど
自分の Is〜 は As Long にしたくてそうしてるんだけど、返り値を受けた時の書き方を
統一的に扱えないのが悩みの種なんですよね...
2017/09/24(日) 20:48:20.98ID:yAXo7hpi0
>>379
それは(失礼を承知で言えば、)ネーミングにセンスが無い。isほにゃららFunctionはBooleanに統一すべし。
2017/09/24(日) 21:04:44.94ID:J5lzydll0
>>380
そうなんだけど...
返り値を合計したものが「〜にあてはまるもの」の数に一致させたいんですよ
2017/09/24(日) 21:06:12.98ID:vk2rgPVS0
同じ関数名で宣言するとユーザー定義関数の方が優先されるはずだから、
いっそ組み込み系のIs〜を全て再定義してしまえばいいのではないだろうか。
2017/09/24(日) 21:12:51.54ID:J5lzydll0
もちろん「Isなんちゃら〜」の返り値を合計した後で -1 をかければいいんだけど、
Trueが-1であることに依存するのもなんかこう、しっくりこないんですよね。
2017/09/24(日) 21:15:05.28ID:yAXo7hpi0
>>381
うむ、気持ちはわからないでは無いがそれは駄目だ。関数名cntなんとかとかnumなんとかとか「〜の数を返す」ヤツらルールを決めて統一すべし。
2017/09/24(日) 21:18:21.48ID:yAXo7hpi0
>>383
-1をかける、とかそんな言語仕様に強く依存する(グロテスクな)コーディングはしないほうが良いと思わない?
2017/09/24(日) 21:18:39.00ID:J5lzydll0
>>380,384

うーん、しょうがない。

これから大改造するか。
2017/09/24(日) 21:24:09.04ID:yAXo7hpi0
>>386

大改造になっちゃうの?それはすまない。
けど、
Function isほにゃらら() As Long
は、やはり美しくないよ。
2017/09/24(日) 21:26:50.23ID:J5lzydll0
いや、
大改造はわくわくする
2017/09/24(日) 22:16:54.54ID:SDtHFGLja
>>374
小学生に罵倒されれば誰でも頭に来る。
内容が無ければ尚更だ。
それに、小学生はきちんと躾ける主義でね。

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

質問に関係無いことしか書かないバカが人に対してここに来るななどと言う資格があるわけ無いだろう。
そんなことも分からないから小学生と呼ばれるんだ。
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
2017/09/24(日) 22:29:18.40ID:SDtHFGLja
元の引数の値に合計を入れて返しちゃうのはさすがに変な気がするけど。
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
2017/09/24(日) 22:52:38.60ID:z5Fx3/zG0
誰か助けてください。

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

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

何とかしてソースコードを取り出すことはできないでしょうか・・。
2017/09/24(日) 23:42:55.80ID:ALrIElNwx
一日で作れるマクロなら大した分量じゃないだろうしもう一回同じコードを組めば良いんじゃね
2017/09/24(日) 23:52:01.97ID:y7FzpsGf0
>>395
こまめに保存しないとそういう目に合うという経験を得られてよかったね
次から気を付けないとね
2017/09/24(日) 23:53:04.05ID:z5Fx3/zG0
>>397
保存はしてあったんだが、ファイルそのものが破損してた。
定期的にExcel落とさないとダメみたいだね。
2017/09/25(月) 00:00:34.87ID:vsx3Rgi+0
>>398
自分はモジュールごと定期的に保存フォルダにドラッグ&ドロップしてる
いちいち「ファイルのエクスポート(E)...」とかしなくてもできることを知って楽になった。
2017/09/25(月) 00:01:40.54ID:AH/NDHtT0
>>398
確かにエクセルは保存をかけても終了するまで保存しないんだよな。たぶんXML形式にして保存する関係からだとは思うけど。
自動バックアップからなら修復の可能性はあるけど、マクロだけ消えたならそのファイル自体は元々マクロ書く前の状態なんじゃないかな。
2017/09/25(月) 00:02:16.67ID:Ch3TwtIS0
あはは、俺なんかそんなのしょっちゅうだぜW
ノリノリで良さげなコードが書けてる時に限って突然落ちやがるWW
もうね、マメに保存する癖を付けないとどうにもならないよね
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はどちらかが真なら真なので、片方が不定でも真だという理屈だな
ショートサーキットしないくせにな
どちらかが偽なら、もう片方に従うから、もう片方が不定なら不定
まあ、理屈として考えれば納得はできる
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)

次レスへ続く
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
今回のはマメに保存するというより、ブックを別ファイルにバックアップしないと対処できないかな。
今度から毎時間スナップショット撮るようにするわ
2017/09/25(月) 03:13:19.89ID:eYOvRkV+a
>>394
よっぽどアホな質問して怒られたのが悔しかったのか?
碌にコードも書けないのに居残ってるってことはw
2017/09/25(月) 03:21:24.47ID:kQfKGPg6a
>>400
そうなの?
保存したのにされてないってのは経験無いなあ。

>>399
バックアップするマクロとか書いてたけどウィルス判定されることもあるし、最近はやってないわ。
2017/09/25(月) 03:26:59.82ID:kQfKGPg6a
>>404
列挙の場合、自分はメンバーの先頭にすべてenmを付けてるな。
昔、誰かがこれやってるの見てからは。
2017/09/25(月) 06:57:33.96ID:vsx3Rgi+0
ExcelがクラッシュするならWord VBAで書けばいいのに
(半分マジ)
2017/09/25(月) 07:18:55.09ID:CDmpdlRb0
>>399
ファイルのエクスポートってのは知ってるけど「モジュールごと」ってのは具体的にどうするんです?
2017/09/25(月) 07:24:22.76ID:dVWzg8Zn0
スプレッドシートで開いてみるとか
ファイル壊れてたらダメ化
2017/09/25(月) 07:25:07.82ID:5kCjH3U30
>>341
はっきり言おう
VBA自体が間口が広いために初心者が扱い易い言語ではあるが
大きなシステムやWeb系には向いていないために
全体から見れば「VBAの上級者」というのは
所詮井の中の蛙に過ぎない。

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

つまりここで初心者がどうのと煽っている奴も
所詮は初心者の域を超えていない。
初心者が初心者を煽ってるだけ。
もっとも俺も自分を初心者じゃないなんてとても
おこがましくて言えないけどね。
2017/09/25(月) 07:25:18.87ID:8Tm148qB0
>>409
VBEのプロジェクトエクスプローラでモジュール名を右クリ
2017/09/25(月) 07:36:56.29ID:VZWzPiEFd
>>409
コードのコピペとか右クリからエクスポート(E)...じゃなくて直接ドラッグ&ドロップするの
2017/09/25(月) 07:48:23.85ID:dVWzg8Zn0
>>411
その話題はもういいよ
415デフォルトの名無しさん (オッペケ Sra3-Ncsu)
垢版 |
2017/09/25(月) 12:29:49.86ID:nP4bJmmCr
>>411
自分が初心者なら皆初心者に違いないってかw
賢いふりをしてるけどお前も>>341となんも変わらない無知を知らぬバカやぞwww
2017/09/25(月) 12:51:20.05ID:b3e1p2YsM
403だけど、会社のEXCELでも試してみたらやっぱりクラッシュする
redim aaa(,1 to 2)
まぁコードとしては間違いだから滅多にこんな書き方しないんだけどさ
でも
redim aaa(,1)
なら、ただのエラー(赤字)になるだけでクラッシュしないから納得行かないわ
一応MSには送っておいた。
参考まで。
2017/09/25(月) 13:08:28.70ID:eYOvRkV+a
>>411
JAVAや.netのできる上級者も多いと思うが。
というか、上級者は他の言語もできる奴が多いだろ。
主戦上がどこかというだけだし、そもそも主戦上だって他言語の人もいるだろ。

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

VBA使いだからといってレベルが低いわけじゃない。
2017/09/25(月) 14:27:01.66ID:VZWzPiEFd
>>417
VBA上でアセンブラ?
興味深いな
2017/09/25(月) 16:13:22.32ID:715ByDora
>>418
正確にはマシン語だね。
VBAとアセンブラでググれば見つかる。
マシン語のコードを変数に格納してメモリ操作して実行させる。

VBAの制限のために普通じゃ出来ないことをしようとする場合や普通に書くとどうしてもスマートじゃない場合に使う。
個人的に使いたい場面が2つ有るけど技術的に自分のものに出来て無いので使ったことは無いが。
2017/09/25(月) 20:21:50.79ID:VZWzPiEFd
>>419
確かに、ぐぐったらすぐに出てきたw
2017/09/25(月) 20:57:17.82ID:AH/NDHtT0
俺もマシン語とアセンブラ言語を勉強したなぁ。
早見表片手にバイナリ読むくらいのところまではいけたけど、
実際にメモリに転写して実行するとか手間が多すぎてあきらめたわ。

マシン語もシミュレータでOS作りに挑戦してHello Worldで止まってる。
2017/09/25(月) 21:10:50.83ID:um3WFj5Ia
>>419
これは駄目だないろんな意味で
2017/09/25(月) 22:14:52.84ID:715ByDora
>>421
VBA上でやる場合はアセンブラが主体じゃなくてVBAで出来ない部分だけに適用するわけだから、アセンブラ自体はそれほど複雑じゃないと思う。
自分の場合は別の言語でmemcmp使ったことがあって、それをVBAに移植する場合に使いたい。
ただ、そのプログラムをVBAで実現する意味が薄いように感じるのと別にmemcmp使わなくても代替あるかもしれないんで実際に組むかどうかは分からないんだけど。
2017/09/25(月) 22:22:34.05ID:eJeLm77Wd
なんでそんなにしてまで?
2017/09/25(月) 22:35:59.26ID:AH/NDHtT0
>>423-424
まぁそこまでするなら別の言語にした方がいいというか、そもそも発想が逆というか。

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

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

ちなみに勉強中にC言語ですらマシン語で直接組むよりも非効率になる可能性が高いと知ったんで学ぶ意味はあったけど。
2017/09/25(月) 22:44:28.13ID:eJeLm77Wd
一体何の話をしているのか?
VBA補完というならC/C++で十二分だろうに
それで「実行環境がVBA」という気軽さは保てるんだし
2017/09/25(月) 22:52:54.75ID:715ByDora
>>424
自分はものにして無いので、そこまでしてない。
ものにしてる人にとってはそこまでしてなどと思ってないと思う。

別言語でdll作ってVBAから呼び出すことも出来るだろうけど、そこだけで完結しないのがスマートさに欠けるように感じるからかな。
2017/09/25(月) 22:54:34.22ID:AH/NDHtT0
>>426
確かに話がとっちらかって分かりにくくなったが、つまりそういう話をしてる。
でもVBA以外の環境を持てない職場なので仕方なくVBAが補完できる範囲だけでやるしかない。
その補完範囲にマシン語を含めるのはVBAの長所を殺しているのでVBAが想定している範囲の中で最善策を練るべきだと。

ちなみに個人的経験では次善の策としてSQLを使ったら地獄を見た。
2017/09/25(月) 23:12:01.96ID:FBvoBYTya
>>426
正解。

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

どうしてもアセンブラで組みたければC++のインラインアセンブラで素直にdllファイル作れって話。
こんなものどうやって普通にVBA組んでるやつに引き継ぐつもりなんだろうな。
出来ない環境でなければ設計自体を見直すか諦めろと。
2017/09/25(月) 23:14:24.47ID:eJeLm77Wd
>>429
引き継ぎとかは別にして、まず楽しいのかと
2017/09/25(月) 23:23:42.83ID:vsx3Rgi+0
>>427
完結ってどういう意味?
「VBA アセンブラ」でググって出てくるページ見ると、既存のcdecl関数を呼び出すことを目標にしてるみたいだけど、
自分はどっちかっていうと「なるべく自分で作ったもので間に合わせたい」という気持ちの方が強いな。
2017/09/25(月) 23:36:31.33ID:715ByDora
>>425
VBAでCのコード扱えれば良いんだけどね。
それに既にWin32APIで色々やってるし、その中には適切に使わないと危険なものもたくさんあるから、別に使っても良いと思うけど。

>>429
まず、アーキテクチャが異なるCPUについては既にWin32APIの時点で使えない。
それにアセンブラが主ではない。
memcmpの部分で使うだけで使う方は呼び出すだけだ。
2017/09/25(月) 23:39:50.62ID:715ByDora
>>431
例えばdllを作るとブックと一緒にdllがついてまわることになるでしょ。
ブックだけでは機能しないというのがちょっと...

ということ。
2017/09/25(月) 23:40:01.82ID:FBvoBYTya
>>432
>まず、アーキテクチャが異なるCPUについては既にWin32APIの時点で使えない。

は?何言ってるの?
2017/09/26(火) 04:06:23.87ID:DLk9dqRTr
VBAの環境なのにマシン語使ってやったぜー
ワイルドだろー
って自慢したいだけ
2017/09/26(火) 07:38:19.44ID:XImuzds2a
どっちにしてもトリッキーすぎて
実用的ではないな
437デフォルトの名無しさん (オッペケ Sra3-Ncsu)
垢版 |
2017/09/26(火) 12:18:09.16ID:YucCMyKYr
お前ら素直に感心する事も出来んのかw
惨めやのうwww
2017/09/26(火) 12:24:44.74ID:H2XQANIBa
関心する要素がない
439デフォルトの名無しさん (オッペケ Sra3-Ncsu)
垢版 |
2017/09/26(火) 12:27:34.92ID:YucCMyKYr
そうゆうひねくれた心を持っとるからいつまでたってもバカなんやで
2017/09/26(火) 12:28:28.01ID:H2XQANIBa
ちなみにどこに感心すればいいの?
機械語の知識が殆ど無いこと?
VBA上でごく中途半端な機械語を走らせる方法をネットで見つけたこと?
2017/09/26(火) 16:11:30.66ID:PIh5pWG1a
VBAだけじゃどうにもならない、別途dllとの込みで扱うのはスマートじゃない。
そういう場合に使える方法があるということ。
他にもこの方法を使えればプログラムがスマートになるのにという場面もある。
これはVBAの制限によるものだけれど。

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

普通はVBAではこの機能は実現出来ませんと回答することになるだろう。
2017/09/26(火) 16:25:14.72ID:PIh5pWG1a
>>434
すまんね。
君がどういうレベルの話をしてるのか、いまいち掴めない。
実際、そういうことも分からないから勉強中なんでね。

アーキテクチャが違うCPUってのが何のことを言っていて、使えないCPUについて具体的にどうして使えないのか示して貰えるかな。
2017/09/26(火) 16:34:44.22ID:r3ztyMSNd
>>441
dll大好きマンの俺としてはその意見に賛成する事態自体ないな
2017/09/26(火) 16:47:20.57ID:w3seKs+r0
今どきアセンブラじゃないと
ダメな場面なんてほとんどない
速度が欲しいならC/C++で実用上十分
2017/09/26(火) 17:07:46.45ID:PIh5pWG1a
>>444
この場合は速度とか関係無いんで。
Cとかでも確かに外部dllを作れば可能だけど。
まあ、でもdll作る方が正論だわな。

問題は自分の望むdll作る能力が自分に無いことだね。
2017/09/26(火) 17:14:42.90ID:w3seKs+r0
VBAだけで実現できない機能があるならDLLでいい
今どきのWindowsでアセンブラなんてまず必要ない
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で登録とか説明した途端「そんなメンドくさい事をやらずに出来ないの?」とかぬかされてムカついた今日此の頃
2017/09/26(火) 18:41:21.08ID:w3seKs+r0
いやDLLが嫌がられてるからって
毎回アセンブラで書いてたら
「これだけのことにそんな時間掛かるの?」とか
文句が変わるだけだろ
2017/09/26(火) 18:51:12.32ID:fvF/8EVL0
dllの登録とかはグループポリシーとスタートアップスクリプトで処理すればいいよ
2017/09/26(火) 19:29:03.17ID:r3ztyMSNd
>>450
絶対パスは?
2017/09/26(火) 19:33:40.39ID:PUkdjjHv0
>>448
ふざけてんなら教えてやんねぇから自分でやれ って言ってやれ
2017/09/26(火) 19:48:34.37ID:r3ztyMSNd
シートをSQLでアクセスしたあとどうも変なことが起こる。
あしたデータをDBに入れてからSQLでアクセスして同じ現象が起きたら自分のプログラムミスだろうけど、
起きなければODBC for Excelを疑ってしまいそうだ
2017/09/26(火) 21:26:46.77ID:XImuzds2a
まぁdllくらいは面倒くさがらず設定出来ないとな。
今後デプロイ作業とかやるようになったらそれどころじゃないしな。
455デフォルトの名無しさん (ワッチョイ af8b-lQLN)
垢版 |
2017/09/26(火) 22:11:26.14ID:Crd6WL0Z0
結局自分の知識を言いたいだけのお前らw
ババアの井戸端会議より無法地帯だなw
2017/09/27(水) 01:51:50.87ID:0UMyaADl0
BBA → 高い化粧品を使っている
VBA → アセンブラを使っている
結論 → どっちもムダ
2017/09/27(水) 08:43:06.78ID:HoC7JNpT0
VBAに不足してるのは主にGUIの部分であって、仕様上実現できない機能なんて相当高度な、それこそVBAでやるべきではないような大がかりなものだろ。
2017/09/27(水) 08:45:17.97ID:HoC7JNpT0
>>453
せめて何が起こったのかぐらい書けよ。
まあ十中八九お前の勘違いだろうけど。
2017/09/27(水) 08:51:33.31ID:0UMyaADl0
>>457
そうだな
VBAで不足してる部分は
C#でやればいいことで

VBAにアセンブラ載せるなんて
原チャリにロケットエンジン
載せるようなイビツさ
2017/09/27(水) 09:32:39.24ID:xHL8iwO20
またソースも示さずエラーコードも示さずただエラーだ!エラーだ!って喚き散らすだけの人間が
2017/09/27(水) 09:53:24.11ID:rapuPXM40
      |三|
     /_____\
     |ギコーマン|
     |___醤油_|
     ,>:::(,,゚Д゚) <呼んだ?
     |(ノ.::::::::: |つ
     |:::::::::::::::::|
     ヽ___/
      U"U
2017/09/27(水) 09:53:37.56ID:p6CZNfKJx
>>460
偉いよね
2017/09/27(水) 12:19:47.02ID:OxJDgjzEa
>>457
もういい加減やめるけど、そのGUI部分で貧弱なMSForms使わずにCreateWindowExで組んでたりした。
んで、いろんな部品のクラス化とかを考えるわけ。
ところがどうしても制限でクラス内に置けないものがあるんでカプセル化が不十分なんだ。
それをアセンブラ使ってクラス内に置いてる人がいるもんですごいなあと。

アセンブラ部分だけdllにしても寧ろ中途半端。
各部品ごとdllにしないとね。
流石にそこまでの能力も無いし労力も割きたくない。

まあ、所詮VBAなんてダメ言語ってことかね。
2017/09/27(水) 13:00:28.04ID:/eBNIii1d
>>458
すまない
エラーが色々あってそう単純じゃなくてついね。

例えば配列になるはずの変数Aを扱っててエラーが出たので内容を見ると
TypeName(A) = Empty かつ IsEmpty(A) = Trueなのに
Debug.Print A とやると
「Visual Basicでサポートされていないオートメーションが変数で使用されています」とか

調査中
2017/09/27(水) 13:16:32.50ID:PSADxl6o0
俺の場合はもっと根本的な部分を高速化する事が狙いでマシン語を使おうと思っていたな。
If文一つ、ループ処理一つ取っても汎用化の関係で無駄な処理が挟まる事になるんで、
極々単純かつ処理時間に占める割合が大きい計算なんかをマシン語で書ければ処理速度がだいぶ違う。

C++言語がインラインアセンブラを備えているように、どうしてもマシン語かそれに近しいものじゃないと実現出来ない事がある。
2017/09/27(水) 17:03:57.20ID:+G+JcjrGM
はじめまして。
Excel2013を使っています。

色振分けについて

https://kokodane.com/2013_waza_064.htm


関数はちゃんと反映するけど処理が重い、、、。
VBAにしたけどエラーになる、、、


関数

=MOD(INT(SUMPRODUCT(1/COUNTIF($C$9:$C9,$C$9:$C9))),2)


VBA

i = Int(WorksheetFunction.SumProduct(1 / WorksheetFunction.CountIf(Range("C9:C" & j & ""), Range("C9:C" & j & "")))) Mod 2


「CountIf(Range("C9:C" & j & ""), Range("C9:C" & j & "")」のところでエラー発生…。

何か間違っているのでしょうか・・・。
2017/09/27(水) 18:10:37.79ID:pdVv0yF3M
>>466
VBAのユーザー定義関数使っても条件付き書式の仕様上、軽くなることはないと思う
Sheetモジュールのイベントでセル塗りつぶしするようにコーディングすることをおすすめする
2017/09/27(水) 18:27:20.02ID:60RbULmH0
>>466
対象の行に存在する値のみで判定すれば軽くなるんじゃない?
その関数だと行が増えるに従って遅くなる
2017/09/27(水) 18:33:40.97ID:PSADxl6o0
>>466
Sub foo(ColorColumn As Range, ColorNum As Long)
Dim r As Range
Dim cols As Boolean
Dim c As Collection: Set c = New Collection
col = ColorColumn.Value
For i = LBound(col, 1) To UBound(col, 1)
If x <> col(i, 1) Then
x = col(i, 1)
If cols Then cols = False Else cols = True
End If
If cols Then
If r Is Nothing Then
Set r = ColorColumn(i, 1)
Else
Set r = Union(r, ColorColumn(i, 1))
End If
End If
Next
r.Interior.Color = ColorNum
End Sub

エラーについては具体的なコードがないから分からないけど、
そのページの様な色分けやるならこんなコードとかの方がいいと思う。
2017/09/27(水) 20:58:26.69ID:aEqZdwF3a
>>466
jと""が気になった
2017/09/27(水) 21:01:26.56ID:WtGXLehDa
アセンブラやマシン語のことを神格化してる人がいるけれど
このスレにだって昔使ってた人もいるだろうし
ある意味覚えることが少ないからObject指向言語や関数型言語より簡単かも知れない。

でも昨今仕事上その知識が必要になることはまず無い。
いつまでも無用の長物にしがみついていないでその分別の勉強に力を配分した方が賢いとは思う。
2017/09/27(水) 21:01:48.90ID:ZXhzFeMta
>>466
そういう書き方をするなら下記のようになると思う。

i=EVALUATE("MOD(INT(SUMPRODUCT(1/COUNTIF(C1:C" & Cstr(j) & ",C1:C" & Cstr(j) & "))),2)")

でも、これは関数が分かってて、関数からアプローチした場合。
普通は自分も>>469のようにするだろう。
エラーになってたのはSUMPRODUCTが配列の積を計算する関数なので、その中のCountIfを分解出来ないからかな?
2017/09/27(水) 21:07:50.10ID:ZXhzFeMta
>>471
神格化なんてしてねーよ。
XBAじゃ出来ないから仕方なくだ。
出来るならやってる。

じゃ、C#やVB.netでライブラリ作るとしても、結局中途半端になるということ。

VBAでオブジェクト指向なんてやんなきゃ良かった。
2017/09/27(水) 21:22:44.64ID:WtGXLehDa
>>473
一般的にはある程度知識がついてきたら
用途にもよるけど絡みがある場合はC#やVB.Net側からEXCELの操作を行うもんだと思う。
2017/09/27(水) 21:34:59.84ID:60RbULmH0
そのCOUNTIF使ったやり方はデータがN行増えれば
計算量がNの2乗倍増えるんだからどうやっても遅いよ
行が増えても1行あたりの計算量が増えないようにしておけば
そこまで遅くはならない

[例]
B    | C | D
-----------------
     | 0 |
コーヒー | 1 | 1
コーヒー | 1 | 1
コーヒー | 1 | 1
お茶   | 2 | 0
お茶   | 2 | 0
紅茶   | 3 | 1

C列は =IF((IF(B3=B2, 0,1))=1, C2+1, C2)
D列は =MOD(C3, 2)
2017/09/27(水) 22:00:35.20ID:L69K1Ov+0
>>471
>でも昨今仕事上その知識が必要になることはまず無い。
ここはVBAスレだからそうだな
477デフォルトの名無しさん (ワッチョイ af8b-lQLN)
垢版 |
2017/09/27(水) 22:10:23.63ID:9IoMVu120
お前ら何があっても絶対に>>474の様にはなるなよ
お前らには.Netでエクセルをいじるくらいなら肥溜めに突っこんだ手でちんこいじった方がなんぼかましだという事を知ってほしい
2017/09/27(水) 22:42:42.85ID:XaTneppSa
Dim co As ChartObject

With co.Chart.SeriesCollection.NewSeries
.Name = "テスト"
.XValues = tmpArray1 'X軸
.Values = tmpArray2 'Y軸
End With


With co.Chart

' 線形近似式の取得
.SeriesCollection(1).Trendlines.Add Type:=xlLinear
.SeriesCollection(1).Trendlines(1).DisplayEquation = True'☆☆☆
.SeriesCollection(1).Trendlines(1).Select
.Refresh

getAlfa = Replace(SeriesCollection(1).Trendlines(1).DataLabel.Text, " ", "") '★★★

End with

for文の中でこれを利用して100個ほどグラフを作っているところです。
線形近似式を作るまでなら出来たのですが、
近似式を取得しようとすると、★★★のところで
「プロシージャの呼び出し、または引数が不正です」となります。

ステップインでやるとエラー無く通るので、☆☆☆の反映が遅いのか・・?
と、よく分からなくなっております。ご助言頂けますと幸いです。
2017/09/27(水) 23:13:25.41ID:WtGXLehDa
>>477
理由は?
2017/09/27(水) 23:23:42.05ID:PSADxl6o0
COMをVBA以外から触るのってくっそ面倒なんだっけか。

確かに一度そういう記事を見たときに引数省略できないわ明示的に解放しないとメモリリークするわで、
下手に外部から弄るよりVBAだけの方が良さそうとは思ったな。
2017/09/28(木) 07:45:23.83ID:6Dj75AXHa
>>480
それはCOMからEXCELを操作しようとするから。
npoi辺りを使えば問題ない。

https://qiita.com/midori44/items/acab9106e6dad9653e73
2017/09/28(木) 18:09:24.72ID:v+KWuCPna
このスレ読むとVBAerの苦悩を感じてしまうな
483デフォルトの名無しさん (ワッチョイ 4d8b-6Ovz)
垢版 |
2017/09/28(木) 20:48:58.21ID:IZ7vMKly0
ところでさあ、お前らの中で「ボクはVBAerじゃない!」ってのが唯一の心の拠り所の人っている?…あ、いたwwww
2017/09/28(木) 20:54:21.56ID:gXNMpsXl0
>>482
20年も経つし、いい加減かなりめんどくさい上、元々の設計からして奇々怪々
2017/09/28(木) 21:05:52.30ID:buJERvd40
古いブックのデータを、新しいブックに移すだけで容量が変わる仕様は酷いよな。
2017/09/28(木) 21:14:44.53ID:0/cKan+O0
うちの会社の情報システム部の人達、VBAばかり使ってるんだけど、これってシステム屋さんとしてどうなの?

変な質問でごめんね〜
2017/09/28(木) 21:20:12.89ID:gXNMpsXl0
>>486
別にどうでもいい
早く作れて保守が容易で堅牢ならそれでいい

ただ、先日こういう凶悪なバグが発生した
https://answers.microsoft.com/ja-jp/msoffice/forum/msoffice_access-mso_win10/access2016/f7dc70ee-e228-473e-a92e-17992a3b16b3?auth=1
2017/09/28(木) 21:22:10.71ID:buJERvd40
>>486
ある言語が使えて他の言語が使えないなんてのはあり得ないから、
特別に何らかの言語を使えと言われてるのにVBAに固執してるとかでない限りは特に問題ないと思うけど。

もちろん別の言語使うとなれば移行期間と、それに掛かるコストの問題は発生するけど、
この移行で発生するコストに収支が見合わないなら如何なる言語であれ移行する方がおかしいし。
2017/09/28(木) 21:29:04.93ID:hQxGv/ed0
>>471
いまだにアセンブラでモーター回してる俺も趣味でVBA使ってるよ
ここを読んでるスレ住人の1/4ぐらいは使ったことある製品に入ってる
2017/09/28(木) 22:02:49.49ID:WRYfTPcca
バイブとか電動こけしなら
このスレの住人はそこまで使ってないよ
491デフォルトの名無しさん (ワッチョイ 4d8b-55BJ)
垢版 |
2017/09/28(木) 22:07:34.72ID:IZ7vMKly0
使ってるくせに(ニヤニヤ
何気取っちゃってんのw
2017/09/28(木) 22:24:44.49ID:v+KWuCPna
>>484
そろそろ何とかしてほしいわね
2017/09/28(木) 23:10:52.31ID:RaSb9ROh0
思い切ってF#に変えてほしいな
C#といいMSは言語はいいものつくるのになんでいまだにVB・・・
2017/09/29(金) 07:18:36.82ID:blTWaqTGM
C# でもいいし PowerShell と言う手もあるしな
2017/09/29(金) 07:42:22.91ID:7sErYghb0
PawarShell
2017/09/29(金) 08:05:24.92ID:AVwn3+7qa
次のエクセルでは.Netモードと旧VBAモードと混在させておいて、次のエクセルで切ればいい
2017/09/29(金) 08:23:21.48ID:+zN4mxkZ0
しばらくはVBAとjavascriptの併存だな
2017/09/29(金) 08:58:12.82ID:Dzyak/bKd
切ることはできない
2017/09/29(金) 10:47:27.85ID:xN5JBlC50
新仕様つくって古いの全部すてればいいんじゃね
2017/09/29(金) 10:54:15.88ID:C0tsoTl7M
>>487
うわあああああああ!俺の会社でもそのバグが始まった。
昨日それ見てなかったら、原因分からなくてパニックやったわ。ありがと
これから数千あるマクロ軍と戦うから、既にパニクッてるんやけどな
2017/09/29(金) 11:13:56.54ID:AVwn3+7qa
>>497
javascripでいくってことはいずれはweb化するんかね
502デフォルトの名無しさん (ワッチョイ 2306-asy+)
垢版 |
2017/09/29(金) 11:24:31.88ID:BKm/kWdC0
>>499
んなこと出来るわけがない
ヲタプログラマの遊び道具はないんだよ
2017/09/29(金) 11:25:38.86ID:BKm/kWdC0
訂正
Excelはヲタプログラマの遊び道具ではないんだよ
2017/09/29(金) 11:37:17.11ID:Dzyak/bKd
プログラマが文句をいうのと一般ユーザーが文句をいうのとじゃ大いに違う
2017/09/29(金) 11:46:58.39ID:LnDObw+pa
拡張子で切り替えるとかはするかも。
でも、現行のVBAで出来ないことなんて殆ど無いわけで、新仕様作ってもそれで新しいことが出来る奴なんて殆ど居ないだろう。

いまだに4.0時代のマクロシート動かしてるところだって有るんだぜ。
そんな簡単に切り捨てられるわけがない。
個人的にはマクロシートは切り捨てて欲しいが。
2017/09/29(金) 12:11:55.51ID:es7HpHgn0
ちょっと前にWindows 3.1からようやく移行した空港の話があったしな。

>>500
昨今はクラウドが流行ってて常に更新するのが流行ってるけど、
仕事で使うなら、やっぱりサポート切れて更新しなくなったヤツの方がいいな。
2017/09/29(金) 12:16:54.98ID:Dzyak/bKd
VBAってMS的にお荷物なの?
2017/09/29(金) 12:58:03.09ID:xN5JBlC50
古いの使ってる自慢は寒いな
2017/09/29(金) 13:35:54.03ID:HP040cNEa
まあ期間システムにoffice使ってるような糞企業は滅びたらいいよ
2017/09/29(金) 18:01:15.73ID:C0tsoTl7M
>>509
ほんとそれな
早くクラウドに移行してほしい
2017/09/29(金) 18:08:46.69ID:55l6TVRn0
期間システムか
短期リースなのかな?
2017/09/29(金) 18:30:11.39ID:YJ/I0Rcga
>>507
お荷物であるかどうかは分からないけど
生きた化石であることは確か


生きてないけど
2017/09/29(金) 18:54:46.16ID:LnDObw+pa
適材適所を知らない奴はコンピューターを使うべきではない。
2017/09/29(金) 19:28:12.26ID:2gPjU4Zja
てか、現状のVBAをjavascriptに置き換えぐらいなら自動で出来るんじゃね?
format関係ぐらいは独自で組み込むんだろうしさ
2017/09/29(金) 21:13:57.76ID:55l6TVRn0
>>513
それだと全人類の97%は失格だろうな
間違った使い方から始まる発明もあるんやで
2017/09/29(金) 21:16:31.80ID:es7HpHgn0
全人類だと半分以上はコンピュータ使える環境に居なさそう。
2017/09/29(金) 21:24:18.98ID:O8EcVrBV0
アフリカなどの話だろうけど、逆。端末が無いと話にならない
現金を銀行まで出し入れしにいくよりも、ネット決済が主流になりつつある
2017/09/29(金) 22:37:04.88ID:xN5JBlC50
>>516
http://40owata.xyz/wp/wp-content/uploads/2017/02/kawaguti27.jpg
2017/09/29(金) 22:49:07.04ID:UEkEvXtR0
この画像がシート2にあって、シート1のA1 1.6 (板厚)
B1 1250 (幅)
C1 2850 (長さ)
が打たれてコマンドボタン1を押したらシート2を検索して結果をシート1の
A3 1.6
B3 1800
C3 3100
と幅と長さが収まる最低限の板を抽出するマクロを組みたいのですが、FINDで板厚を検索してから幅、長さの条件のやり方が分かりません。長さが幅よりも小さくなることもあったりしてどうしたらいいか...教えて下さい。

https://i.imgur.com/h3o3xph.jpg
2017/09/29(金) 22:51:53.27ID:O8EcVrBV0
>>519
最低限って何が最低限なの?面積?それとも縦か横の長さ?
2017/09/29(金) 22:52:10.70ID:O8EcVrBV0
>>518
申し訳ない、その芸人つまらないんだよねぇ
2017/09/30(土) 09:40:29.40ID:JKOApPN+a
>>519
まず、日本語が変。
「この画像がシート2にあって」とか「が打たれて」とか。

FINDで板厚を検索するところまでできるならその後はー行ずつ幅と長さが両方共指定の値より大きくなるまでループすれば良いだけだろ。
何が分からんの?
2017/09/30(土) 09:41:22.54ID:cWHb4Ejy0
>>520
幅と長さです。最低限というのは一番近い寸法のことです。
2017/09/30(土) 09:43:38.89ID:JKOApPN+a
ああ、幅と長さが逆転することもあるわけか。
ロジック的には最初から幅と長さのラべルを無視してしていする方も各行の値も大きい方と小さい方で比較すれば良い。
2017/09/30(土) 10:04:04.01ID:cWHb4Ejy0
>>524
元の幅と長さを比較して、大きい数字が幅なら幅の列を大きくなるまでループして大きくなったらその隣の長さのセル。長さが大きかったら長さの列をループって事ですか?
2017/09/30(土) 10:35:29.83ID:JKOApPN+a
いんや、幅とか長さとか考えるからおかしくなる。
大きい方と大きい方、小さい方と小さい方を比較する。
2017/09/30(土) 10:43:02.05ID:JKOApPN+a
比較は同時にするでしょ。
各行の大きい方がシート1の大きい方より大きくて且つ各行の小さい方がシート1の小さい方より大きいのが求める値。

シート2は最低限順に並んでる前提。
幅と長さが逆転することを考慮すれば最低限とは何かの定義が必要になると思うけど、その順番に並んでる前提。
並んでいるとは限らないなら、定義を決めることから始めないと無理。
2017/09/30(土) 13:05:00.67ID:yw9Iy9kh0
鋼材屋の問題か こういうのは紙資料を人間の目で見た方が百倍速いんだけど
どうしてもやりたい やりたくてたまらない しかも楽に ってなら
Aの板厚入れた段階で板厚グループにジャンプ
Bの幅入れたらそれ以上の範囲を色分け 同様にCの長さ以上を色分け するだけでよくね
BとCが両方含まれる範囲のうち最小を見るだけで答えは出る

と、以上の発想でそれをVBAで組み込みばおk
長さと幅が逆転してても幅がオーバーした時点でチェック・メッセージ出せばいいんじゃね
2017/09/30(土) 13:06:04.51ID:fESVPuSfd
シート2は順に並べる予定です。どんなコードになるんですかね?さわりだけでもお願いします。
2017/09/30(土) 14:05:15.02ID:GPI9f4Dn0
>>519
vbaスレなの忘れてたわ
数式で完成させたから後は適当にやってくれ
コツは必ず縦長として考える事(横長でもいいけど)
https://dotup.org/uploda/dotup.org1351421.rar.html
2017/09/30(土) 14:15:20.63ID:JKOApPN+a
>>529
だからこんなの誰でもできるだろ。
FINDは使えるんだよね。
見つかった板厚の次の板厚も分かるよね。
For〜Nextも使えるんだよね。
532デフォルトの名無しさん (ワッチョイ 4d8b-6Ovz)
垢版 |
2017/09/30(土) 21:59:05.80ID:1jTnlOmW0
サヴァン症候群のやつが紛れこんでるな
533デフォルトの名無しさん (ワッチョイ 1511-haX9)
垢版 |
2017/09/30(土) 22:34:04.27ID:wxoKQfA20
VBAによるIE操作で土曜日潰しました。。
ビットコインの自動売買をVBAでやろうと思っていますが肝心の「買い」のボタンが押せません...プログラミング系の掲示板で聞いても挫折されてしまい、大ピンチです..万が一わかる方いらっしゃいましたらぜひ教えてください....

ビットフライヤーですがアカウントは無料で一瞬で作れます。口座開設しなければどう転んでも下手に取引が実行されることはありません。

↓↓ コードです
2017/09/30(土) 22:35:25.87ID:GPI9f4Dn0
>>533
>プログラミング系の掲示板
これはどこ?
2017/09/30(土) 22:42:44.44ID:rkDSNjFp0
>>533
何か有名なコピペ?
2017/09/30(土) 22:49:04.96ID:i1VkQTK10
挫折されてしまい
537デフォルトの名無しさん (ササクッテロラ Spe1-K4J0)
垢版 |
2017/09/30(土) 22:50:02.92ID:LQYU2gZ2p
533です

>>534
そっちでは本名に近いID使っちゃってるので勘弁してください

要はビットフライヤーの売り買いのボタンなんですがどうやら、価格数量を手入力しないと入力が認識されず売り買いのボタンも押せない感じでもう私には手に負えません…
2017/09/30(土) 22:56:17.57ID:xJtoY5tg0
ビットフライヤーにメタトレーダー対応の要望でも出した方が早いんじゃないの。
539デフォルトの名無しさん (ササクッテロラ Spe1-K4J0)
垢版 |
2017/09/30(土) 22:58:24.56ID:LQYU2gZ2p
やっぱここでもわかんないわな…
2017/09/30(土) 23:25:44.90ID:GPI9f4Dn0
そもそもサイトURLも貼らずに分からないんですねとか言われても困る
ビットフライヤーって何よ
2017/09/30(土) 23:26:07.97ID:GPI9f4Dn0
あと、指値注文って出来ないの?
542デフォルトの名無しさん (ササクッテロラ Spe1-K4J0)
垢版 |
2017/09/30(土) 23:43:07.96ID:LQYU2gZ2p
指値注文できますよ
その指値価格を、手入力しないとダメな感じがします
urlなんかngワードに引っかかってるみたいで…ビットフライヤーでググって先頭のページですすんません
2017/09/30(土) 23:53:06.19ID:GPI9f4Dn0
指値価格をマクロで登録するの???
なんかよーわからん。それに、そんなNG入ってるサイト見たくないわ
どうしてもやりたいなら、画像解析+キーボードマクロなどの手もあるぞ
それか儲かるってわかってるならさっさと外注すればいいと思う
クラウドワークに投げれば5マンぐらいでできるだろう
2017/10/01(日) 00:11:53.31ID:3e3sQ7PN0
>>542
IE操作はVBAでやらん方がええぞ
Win10/IE11になってから昔ながらの方法が次々と使えんくなって、みんな右往左往してる
対処法もあるけど動作が遅くて、コンマ秒の差で大損するようなトレーディングには事実上使えん
Win7でやるなら話は別だが

今は自動運転ならchromeのが簡単
入力もクリックもブラウザ組み込みのスクリプトでたいてい可能
2017/10/01(日) 00:15:57.84ID:K7rLeuVl0
あぁそうかやchromeの開発ツールでjsぶっこめば終わりじゃん
vbaでアホみたいなこと覚えるより、jsイチから覚えたほうが楽だし有意義だな
546デフォルトの名無しさん (オッペケ Sre1-R4yE)
垢版 |
2017/10/01(日) 02:13:12.92ID:nppNViK/r
vbaよりjsいちがいいよな
2017/10/01(日) 13:38:34.30ID:PxgxVv4ea
>>544
使えなくなってるか?
どんな所で?
俺は問題なく使えてるように思うが、どこが駄目になったの?

>>533
どの言語でやるにしてもDOMの知識が必要。
押すのは多分簡単に出来るが、そのページがどう作られてるか次第な面がある。
548デフォルトの名無しさん (ワッチョイ a3b3-Ddq2)
垢版 |
2017/10/01(日) 18:29:42.75ID:1isdaW610
あえて無理を承知でVBAでやるのがVBAerの心意気だろがw

VBAの貧弱な仕様に疲れてしばらくC#とPYTHONを勉強していたがそういう言語で作ったアプリを
渡しても誰も使わねえのよ。もう、日本企業では エクセル操作=業務という定義が確立していて他に許せるのは
一太郎ワードアウトルックぐらいなんだよ。窓際社員の作ったPYTHONアプリなんか信用できないんだってよWW

泣けてくるぜ・・・
2017/10/01(日) 19:05:43.78ID:yUwdbVfTa
>>548
そら日本のITは遅れますわ、という話やね
セキュリティに金かけられないからネット遮断したり権限締め付けたりするわけだしな
2017/10/01(日) 19:15:03.79ID:K7rLeuVl0
>>548
.NETとかのほうがいいんじゃないか
551デフォルトの名無しさん (ワッチョイ a3b3-Ddq2)
垢版 |
2017/10/01(日) 19:19:07.34ID:1isdaW610
>>549
スマホとタブレットの普及でPCわからないのがデフォになっちゃったからなぁ。今年4月に入社したT大出のヤツが「マクロ教えて下さい」と
言ってきたんだが内心「どんだけハイレベルな質問されるんだろ」とガクブルしてたらシート関数ですらSUMしか知らないとかそんなレベルだったんで驚いた。
講義でC言語やったそうだけど「さっぱりわからなかった」そうで。こりゃ日本やべえよ
2017/10/01(日) 19:21:46.47ID:K7rLeuVl0
Cやコボルよりもvbaの方が100倍役に立つよな
553デフォルトの名無しさん (ワッチョイ a3b3-Ddq2)
垢版 |
2017/10/01(日) 19:27:45.32ID:1isdaW610
>>550
だってね、PYTHONってのはもう、dotnetやってて「こんなのがあったらいいのに」と考えるモノが全部そろってるんだよ。
俺のやってる仕事はGISなんかも使うんだが、こういうのはもうPYTHONの独壇場で、殆どコード書く必要が無いぐらい出来あいのが
充実してるのよ。EXCELに特化したライブラリもある。全体に動作がモッサリなのが難点なのと、文字コードで頭が禿げそうになる、PYTHON3系なら大丈夫かもだが。
2017/10/01(日) 19:30:23.99ID:K7rLeuVl0
>>553
へぇ〜〜
数学系は強いって聞いてたけど、そんな所も強いのか、ありがとう
2017/10/01(日) 19:33:20.65ID:vVN95Kjf0
>>553
>文字コードで頭が禿げそうになる
www(ゴメン、つぼったわ)
556デフォルトの名無しさん (ワッチョイ a3b3-Ddq2)
垢版 |
2017/10/01(日) 19:39:46.20ID:1isdaW610
>>555
機械学習なんかで注目されているpythonがイマイチ普及しない理由はコレって言われているぐらいだからね。
557デフォルトの名無しさん (ワッチョイ 4d8b-6Ovz)
垢版 |
2017/10/01(日) 20:07:01.84ID:l4AEDu2B0
元からハゲのくせに何ちょっと見栄はってんだよw
2017/10/01(日) 20:08:57.83ID:vVN95Kjf0
>>557
いや、あのフレーズを言おうと思ったんだけど。失礼だからw
2017/10/01(日) 20:24:19.84ID:GsAXo2mba
>>553
GISって言ったら昔の話だがGoogle Geocoding API使ってVBAで住所→緯度経度取得は簡単に出来たな。
Yahooも出来たと思う。
xml扱えれば誰でもできる。
VBAでの簡単ってのが他言語に比較して不明だが。

ただ、それやって良いかどうかが分からん。
Webに埋め込んだりするのは良いんだろうけど、自分が情報取得する為に使って良いんだろうか。
2017/10/01(日) 20:56:53.42ID:K7rLeuVl0
>>559
APIは回数決まってる
それ以内ならok
2017/10/01(日) 21:26:28.19ID:GsAXo2mba
>>560
うん、それは知ってた。
けど、それはそれを利用したwebサイトに訪れる人数を意味してると思ってた。

Google Mapとの併用に限り認められるからVBAでの情報収集には認められないんじゃないかな。
2017/10/02(月) 04:20:33.43ID:kfrAYa2SM
VBA初心者です。
質問させてください。
複数ファイルに同じ文言を自動入力させたいと思いVBAで組み始めました。
ファイルを探し、開くとこまでは出来たのですが、最終行+1が上手く取得できません。
アップロードした画像ファイル(これはネットで拾ったイメージです)のような状態で最終行を取得すると、"261"行目が取得されてしまいます。
取得したいのは"258"行目なのです

どなたかコード毎サンプルを頂けないでしょうか?
よろしくお願いいたします。

https://i.imgur.com/GNoEnCb.jpg
2017/10/02(月) 07:03:12.10ID:REp4OUHM0
>>562
Sub foo()
Debug.Print Cells(Rows.Count, 9).End(xlUp).Row + 1
End Sub
2017/10/02(月) 07:32:45.73ID:YgMVA043x
>>562
データの入ったセル範囲を取得しようとしてUsedRangeを使ったら書式設定されてる空白セルまで含まれた範囲を取得してしまったってとこかな
2017/10/02(月) 08:16:05.11ID:vqsqdnCg0
>>563
回答ありがとうございます。
9は何の数字でしょうか?

>>564
そんな感じと思います。
ここで取得した最終行+1に別シートで入力した日付、担当者名、備考MSGを貼り付けるプログラムにしたいと思ってます。

ざっくり作ってるのはこんな感じです。

特定フォルダから、○○01.xlmsというファイルを開いて、最終行+1に別シートで入力した日付、担当者名、備考MSGを貼り付け

保存、閉じる

次のファイル○○02.xmlsを開く
ファイル名の数字は増えたり削除されたりするので、○○が含まれたファイルを順次開いていく感じにしようと思います。
2017/10/02(月) 08:22:24.91ID:hd0o7pZ3a
>>565
この程度のことここで聞くより調べた方が早いぞ
cellsの引数も知らんの
2017/10/02(月) 08:40:49.45ID:HOU1vMaL0
>>566
質問スレで質問したら怒られたでござるw
2017/10/02(月) 10:03:34.20ID:DxKMMk9ba
そりゃ2次方程式の解き方聞いてる最中に"+"の記号って何ですかとか加算って何ですかと言われても困るだろう。
そこが分からなくて何で2次方程式なんだってことになる。
2017/10/02(月) 10:07:24.98ID:MUILmKSw0
いや別にRangeとか基礎から聞いてもええんやが
質問のレベルにかかわらず、答える人がいるかどうかは別問題
2017/10/02(月) 10:12:19.65ID:hd0o7pZ3a
>>567
怒ってるんじゃなくて呆れてるんだけど
まあVBAなんてえてしてそう言うものだと言えばそうなんだけどな
なんでもかんでも教えてあげるのもどうかと思うんで
2017/10/02(月) 10:30:59.51ID:ylcTB1y5d
>>548
窓際社員瀬戸際の私はpython勉強しています(非情報システム系所属)。
そんな私はどうしたらいいでしょう?
ご教示ください。
2017/10/02(月) 10:54:33.73ID:DId0lIUx0
Cellsの引数がわからないんじゃなくて
>>563の例で9列目を指定してるのはなぜ?ということでは
質問者のあげたサンプル画像がI列の最終行 + 1を赤く囲ってたから9列目としたんだろう
2017/10/02(月) 11:03:26.25ID:DxKMMk9ba
>>572
質問者自身が9列目にした理由が分からんってことは無いだろう。
自らI列のセルを指定してるんだしさ。

9を何かの特別な数値と勘違いしたのかなとは思ったけど。
2017/10/02(月) 11:53:58.34ID:hd0o7pZ3a
元のコードがないと何事も推測にしかならん
無意味
575デフォルトの名無しさん (オイコラミネオ MM2b-pY8a)
垢版 |
2017/10/02(月) 18:10:19.22ID:HNUJs0p8M
VBAでIf〜Thenの後を空行にすると次のElseIfが評価されないということは有るのでしょうか?
具体的には、

If var = 正常値 Then
ElseIf var = 異常値1 Then
(異常値の処理)
ElseIf var = 異常値2 Then
...
End If

のようなコードです。ElseIfがいくつも続くので最初に正常値にマッチしたらすぐに抜けるようにしたいのです。
最初のIfの後にブレークポイントを設定してもすり抜けているようです…
よろしくお願いします。
2017/10/02(月) 18:12:48.89ID:hd0o7pZ3a
>>575
ないよ
他のとこ間違ってるんじゃない?
577デフォルトの名無しさん (オイコラミネオ MM2b-pY8a)
垢版 |
2017/10/02(月) 18:17:23.60ID:HNUJs0p8M
>>576
ところが同じコードでIf〜の行を削除して二行目をElseIf→Ifに直したところちゃんと動いているようなのです。
最初のIfにマッチしてるということは無い筈なのですが…
2017/10/02(月) 18:49:28.05ID:hd0o7pZ3a
>>577
前後と処理の内容と何を比較してんのかわからんと答えようがない
2017/10/02(月) 19:25:33.87ID:DhQKhKMI0
>>575
これSelect文使うべきじゃないの。
2017/10/02(月) 20:56:43.55ID:bjzv4P4lM
>>575
「正常値」と「異常値1」が定数か変数で同じ値とか
2017/10/02(月) 21:21:19.44ID:IbhHl2kC0
>>577
変数が期待通りになっていないんだと思う。
ステップ実行していけば変数がどう変化しているかすぐわかるんだけど
まだデバッグを使いこなせないビギナーさんなら
msgbox var
をいたるところにちりばめて実行して
メッセージボックスで変数の変化をみるという方法があるよ
自分もデバッグ?なにそれ?なころはそうやってた
2017/10/02(月) 22:08:19.69ID:MUILmKSw0
>>577
Ifの次の行じゃなくて、Ifの行にブレークポイント設定して変数や定数の値を確認してみ
ブレークポイントは「その行が実行される直前で停止」だから
583デフォルトの名無しさん (ワッチョイ 6a96-BYga)
垢版 |
2017/10/05(木) 18:21:05.77ID:gtEpGXfw0
win10 64bitでExcel2016使ってるんだけど

最近やたらに、「メモリ不足〜64bit版に〜」的なポップアップ出てフリーズするんだけど
なんかアプデで仕様でも変更したんかな
584デフォルトの名無しさん (ワッチョイ 4103-r61h)
垢版 |
2017/10/05(木) 23:19:02.08ID:VoC8r++Z0
どんな理由でフリーズする仕様にしなきゃならんのだ
いくらmsさんとは言え濡れ衣にも程がある
2017/10/06(金) 00:13:17.19ID:VzJME0sV0
>>583
2016 100台くらい扱ってるけど聞いたこと無いな。
あとofficeは64bit版出てはいるけど非推奨じゃなかったっけ
2017/10/06(金) 01:43:54.00ID:tqIbkLAn0
Windows Defender で、フルスキャンしてウイルスチェックしろ

クイックスキャンでは見つからないので、フルスキャンしろ
2017/10/06(金) 01:46:36.74ID:tqIbkLAn0
マクロが無限ループしているとか、バグってるのかも?
2017/10/07(土) 21:24:36.96ID:zjjumFnz0
鮪うまいにゃー
2017/10/10(火) 03:19:47.77ID:Sh5NAJQR0
とあるcsvファイル(測定器の出力でかなり細かい数値データ)があるのですが
この数値をExcelで一部変更して保存すると全体的に数値が勝手に丸まったりしてしまいます…
(変更していない数値も全て)
色々調べたのですがこのあたりは仕様?みたいなのですがなんとかならないものなのでしょうか
2017/10/10(火) 08:13:32.86ID:hYsWd5kHa
>>589
vbaと関係なくね?
仕様ならどうしようもないじゃん
csvの中身読んでExcelに書き込んでいけばなんとかなるかもしれんけどそういうこと?
2017/10/10(火) 08:32:44.79ID:VWeCWDa40
>>589
お前のやり方が間違ってるだけ。
開くんじゃなくてインポートしろ。
そしてそもそもVBA関係無い。
2017/10/10(火) 11:08:33.85ID:4/mxA4vP0
>>589
Excelの表示(見え方)の話であって実データは変わったないのではないか?
Excelpで表示時の桁数を指定すれば正しい数値が表示されるんじゃないの
2017/10/10(火) 12:05:43.76ID:Sh5NAJQR0
>>590-592
どうもありがとう、なんとか自己解決しました
ここで聞いたのは、一応一連の処理をVBAでやっていたので…

Excelでは仕様としてcsv保存するにしても細かい数値は勝手に丸めてしまうようでした
1.00001、1.00002…と並んでいる数字もExcel上から上書き保存するとただの1になってしまいます
これはインポートしても同じ事でした
結果として修正するときは数字として扱い、保存する前に全て文字列とすることで解決しました
しかしこれでも数字の丸めを止めさせられるだけで、各所それなりに変更されてしまいます
例えば、1.00000はどうやっても1になってしまいます
あるときには便利な仕様なのかもしれませんが、やっぱり余計と思える方が大きいですね…
どうもお邪魔しました
2017/10/10(火) 12:13:17.55ID:VWeCWDa40
全然解ってなくて草
2017/10/10(火) 12:41:07.46ID:zHyIV0/3M
>>593
Excel 2013 の話だが

> 1.00001、1.00002…と並んでいる数字もExcel上から上書き保存するとただの1になってしまいます
再現しない

> 例えば、1.00000はどうやっても1になってしまいます
Excelで書式を設定して上書きすればいいだけ
当然csvには書式は格納されないので書式の設定は毎回必要
2017/10/10(火) 14:46:41.79ID:4/mxA4vP0
>>593
<csvをExcelで開き、1.00001 と表示されていた場合>
       csv   Excelで開く  csv保存
実データ: 1.00001 → 1.00001 → 1.00001 ←丸められていない
見え方1: 1.00001 → 1.00001 → 1.00001
(Excel2007で開いたときはこのパターンで全桁表示され、丸められることはなかった)

<csvをExcelで開き、1 と表示されていた場合>
       csv   Excelで開く  csv保存
実データ: 1.00001 → 1.00001 → 1 ←丸められた
見え方2: 1.00001 → 1     → 1
(Excel上では正確な値を保持していたが、csv保存時に丸められた)

Excelでcsv保存する場合、見えている通りにcsvに書き出されるから
正しい桁数に書式設定(桁数指定)する必要がある
(Excelのbook形式で保存するなら、丸められることなく正確な値を保存できる)
2017/10/10(火) 15:46:51.35ID:Sh5NAJQR0
>>595-596
どうもありがとう
CSVを普通にExcelで開いた時点での表示形式は指数になってます
この時点ではある意味見た目上も全桁数表示されてるのですが
csv保存するときに自動的に普通の数値に変換して更に丸めてしまうみたいです
よくわからないのは0.00001は丸められないけど1.000001は1に丸められます
Excelのバージョンは2016です

いずれにしろ表示形式を変えることで対処するしかなさそうですね
とりあえず文字列にしてしまえば全て保存できるようで何よりです
確かにxlms形式なら全て保存できるみたいなのですが
測定器がcsvで吐き出すことを前提に色々と組んでしまっているので…
2017/10/10(火) 16:00:05.93ID:hYsWd5kHa
>>597
excelをcsvで保存するんじゃなくてtextstreamとかでcsvに吐き出すようにすれば?
意味わからん挙動をするものに関してはそこを介さないのが一番のような気がするんだが
2017/10/10(火) 16:00:40.01ID:7WxooWaTa
>>597
保存じゃなくてエクスポートを試してみた?
自分の記憶では保存は駄目でエクスポートなら上手くいくと思うんだが。
2017/10/10(火) 16:05:11.32ID:7WxooWaTa
あれ?
何か勘違いしてたみたいだ。
>>599は忘れてくれ。
2017/10/10(火) 16:10:44.15ID:f04ktCAUx
Outlookで指定したメールのtoアドレスとccアドレスをエクセルに書き込みたいのですが、itam.TOとCCにすると名前が書き込まれてしまいました。そこでTOをやめてitam.SenderEmailAddressにしたらアドレスが入ったのですがCCは見つけられませんでした。
分かる方、お言えてもらえませんか?
2017/10/10(火) 18:21:14.88ID:1oxHy7+aM
>>601
outlook.RecipientsクラスのpropertyAccessorから、getproperty使って取り出してるけど、今はソースを提示できない。
どっかの日本語サイトから見つけたんで、頑張って探して‥
2017/10/10(火) 19:18:52.42ID:Gdc/ZOOr0
会社で「顧客名簿のDBから吐き出したCSVをエクセルで編集して又システムに
戻したいんだけど遅いくて困ってる」と言われて「エクセルじゃなく専用エディタでやれよ」
と言ったら「勝手にフリーソフトをインストールできない」と言う。つまり、泣き付けばマクロで作ってくれると思ったんだろうな。

冗談じゃねえと思ったが興味本位でネット漁って作ってやったよ。礼の一言もなんも無しだが、何も言ってこないから普通に使えてるんかな。
CSVをエクセルに食わせるのはQueryTableが一番?速いみたいね。データ型も指定できるし。保存は保存するディレクトリにブックをコピーして
書き出すとまあまあ速かった。と言ってもせいぜい30000件程度(会社規模が知れるw)だからあんま参考にならないかもだが。
2017/10/10(火) 19:25:55.56ID:3LTSijN20
>>603
すっげえええええええええええええ!!!!!!!!!!!!!111
2017/10/10(火) 19:45:55.99ID:zHyIV0/3M
>>597
> CSVを普通にExcelで開いた時点での表示形式は指数になってます
なら初めからそう書いてくれ

> この時点ではある意味見た目上も全桁数表示されてるのですが
本当になってる?
Excel 2013 だから動作が違うのかも知れんが 1.23456789E+00 を読み込むと 1.23E+00 になる

> csv保存するときに自動的に普通の数値に変換して更に丸めてしまうみたいです
指数表示は全桁読み込んでるけど表示上の有効桁を3桁に決め打ちしているように見える
なのでそのまま保存すると3桁分に丸められてしまう

> よくわからないのは0.00001は丸められないけど1.000001は1に丸められます
それ指数表示でどうなってるかを見ればわかると思うが...
って言うか指数表示の意味わかってないのか?
2017/10/10(火) 19:55:17.15ID:f04ktCAUx
>>602
ありがとう!がんばってみる。
2017/10/10(火) 19:55:39.26ID:f04ktCAUx
>>602
ありがとう!がんばってみる。
2017/10/10(火) 20:17:36.56ID:VnbRlrtb0
>>604
え?どの辺が?
2017/10/10(火) 21:23:16.18ID:t2xxwznZ0
>>603
自分の担当の仕事やんないでマクロせこせこ組んでるのってどうなのかな
610デフォルトの名無しさん (ワッチョイ 7d60-25LY)
垢版 |
2017/10/11(水) 00:24:10.90ID:8tv9PUwe0
>>603
まさに神
2017/10/11(水) 00:33:25.96ID:KAFzS1A50
>>603
ブックに保存のあとDB更新はどうするの?
2017/10/11(水) 18:37:53.22ID:L5RL6WNG0
>>603
勝手にフリーソフトインストールできないのに、勝手に作ったマクロいれていいのか?
2017/10/11(水) 18:41:22.40ID:L5RL6WNG0
>>612
逆に金もらえばフリーソフトじゃないから入れてもいいのかな
2017/10/11(水) 20:42:55.70ID:Zr2u7FH4M
>>612
上から見たら単なるExcelファイルだから
2017/10/11(水) 21:35:40.57ID:Ahl7d1lra
単なるexcelファイルに見えるフリーソフトならいれてもいいのか
2017/10/11(水) 21:40:05.73ID:lJAOhUBd0
上に聞けばいい
617デフォルトの名無しさん (ワッチョイ daeb-GMdf)
垢版 |
2017/10/11(水) 21:45:50.25ID:0mVU1QGV0
>>612
業務で作ったソフトは会社のもの
2017/10/11(水) 21:53:34.37ID:/oOufQ5f0
>>615
お前が決める事じゃないし、合理的な回答とか求めてないし
619デフォルトの名無しさん (ワッチョイ d1e3-HnJS)
垢版 |
2017/10/12(木) 03:28:06.76ID:bkFDlrr00
企業だと、Excelは書類扱いやな
マクロも同じ(Excelを加工するExcelファイルという扱い)
「Excelマクロ禁止」って書いてない企業ならまぁ合法かもな(VBSはええんやで)
2017/10/12(木) 08:00:49.64ID:eI9n71dPd
Excelマクロ禁止ならWordマクロを使えばいいのに
2017/10/12(木) 08:08:08.79ID:IaLGP3ZLa
マクロダメな企業って何ゆえなんだろ
2017/10/12(木) 08:09:22.27ID:V4FXvHlK0
下手に素人が自動化してデータを触るとデータが消えるかもしれない!
きちんと目視で確認すること!
2017/10/12(木) 08:36:02.53ID:+534zcJo0
電卓で計算した結果を入力するのが正しい、と思い込んでる老害が幅を効かせてるんでしょ
2017/10/12(木) 11:01:32.26ID:+B3woImAp
いやいや、誰もマクロ禁止とは言ってないから

フリーソフトNGでもマクロ禁止と明言されてなければOKでは?と言っているだけかと
そして答えは>>617
2017/10/12(木) 12:22:01.01ID:7g4EHxnpM
マクロを使うのはずるいんだもん!
2017/10/12(木) 12:44:11.82ID:Aeas92Wzd
作るのはずるくない
627デフォルトの名無しさん (ササクッテロロ Sp45-97Ee)
垢版 |
2017/10/12(木) 12:56:55.18ID:+aWFVLPap
フリーソフトを禁止している理由として
著作権とかライセンス関係の理由なのか
ウイルスとかセキュリティ関係の理由なのか
それ以外か
複合的な理由かによるんじゃね

会社で作ったのなら著作権は問題ないだろう
ウイルスは問題無いけどセキュリティホール的な問題がある場合もありうるかなぁ
2017/10/12(木) 15:03:41.75ID:Aeas92Wzd
ソースコードそのものは外部のものを導入しても構わない、という会社が大多数だろうから、オープンソースを探せばよい
2017/10/12(木) 15:46:25.11ID:+VeyGWZM0
うちのお客の社員用PCでは拡張子exeのファイルは起動できない
そしてインストール権限を認めてないのでインストーラーを起動できない
この辺が必要な場合は上司を介して情報システム部に許可をとる必要がある

まぁOfficeと社内用ツール以外は使うなよって感じ
ちなみにVBAには特に制限とかかかってない様子
630デフォルトの名無しさん (オイコラミネオ MM8b-2LZo)
垢版 |
2017/10/12(木) 17:41:48.83ID:b/XoeLt7M
CSVの行頭と,の後に'を挿入してから開いたらいいのでは?
文字列化して良ければの話だけど
631デフォルトの名無しさん (ワッチョイ 09b3-97Ee)
垢版 |
2017/10/12(木) 18:04:04.30ID:I2SSXy8u0
>>628
オープンソースでもライセンスはいろいろ

オープンソースなら商用利用も可能とは言い切れない
2017/10/12(木) 18:23:12.96ID:Sln3lYHR0
C++で自作したフリーソフトなら入れていいのか?
エクセルマクロで実行ファイルを書き換えるのはありなのか?
2017/10/12(木) 18:38:31.99ID:i7nZkF8G0
はいはい、おやつは300円までね
バナナはお弁当箱に入っていたらお昼ご飯だけど
別に持ってたらおやつとみなすわよ
634デフォルトの名無しさん (ワッチョイ 13eb-97Ee)
垢版 |
2017/10/12(木) 19:09:55.75ID:LSdt7/hd0
>>632
会社で作ったのなら言語に依らずフリーソフトにはならないんじゃね?

自宅とかで作ったのなら従業員かどうか関係なく一般のソフトと同じ扱いだと思う

実行ファイルを書き換えた結果
会社に損害を与えたら懲戒処分とか損害賠償とかの可能性もあるんじゃね?
悪意の程度とかいろいろ関係しそう
2017/10/12(木) 19:29:54.79ID:Sln3lYHR0
>>634
マクロでデータ書き換えるのがありで実行ファイル書き換えるのが駄目?
csvだって帳簿の金額なら損害与えることもできるよ
2017/10/12(木) 19:52:02.88ID:jk5hMeLi0
そういう時に必要な要件は、責任の所在を明確に出来るかどうか
マクロでトラブルが起きると、作ったやつが悪いか使ったやつが悪いか、みたいな面倒な話になって、ヘタすると業務が止まって
マクロで得られた時間の短縮という恩恵以上の損失が出る可能性があるというか、禁止してる所は過去に苦い経験が
あることがほとんど

例外を認めるのもこれまた面倒だから一律禁止にしてる所も多い
会社がある程度の規模になると、本当に小回りがきかなくなるんだよ
Windowsの壁紙の変更すら認められない、みたいな職場も見てきたから
637デフォルトの名無しさん (ワッチョイ 13eb-97Ee)
垢版 |
2017/10/12(木) 20:37:36.71ID:LSdt7/hd0
>>635
実行ファイルを書き換えてはダメとは書いてないんだが
結果とか必要性とかいろいろ関係しそうと言う意味

別の手段で実現できることをわざわざその手段を使う必要があるかとか、結果の程度とか

会社に損害を与えたら懲戒処分になる可能性があるのはどんな業務でも同じ
2017/10/12(木) 21:03:23.99ID:nSOq2nGha
ウィルスも簡単に作れるけどね。
昔、客に納めた文書が誤検出されたことがあって、問題になりかけた。

今ならあんなマクロは納めないな。
2017/10/12(木) 21:09:46.58ID:nSOq2nGha
そもそも、VBA込みの仕事が殆どじゃないの?
フリーソフトは許可が必要だろうけどVBAについては最初から込みの話であって、駄目なら最初からそういう指示がある筈だ。

フリーソフトは駄目だからVBAで同じ機能を実現すれば良い。
どうしても必要だけどVBAで作るのが難しいなら上司を説得するか有料のソフト買って貰うしかない。
2017/10/12(木) 21:24:11.45ID:xm9Gd8D00
HTMLやjavascriptをメモ帳で組むのは辛いからテキストエディターぐらい入れさせてほしいわねえ
ブラクラならHTAで簡単に作れるんじゃね
641デフォルトの名無しさん (ワッチョイ 13b9-b/Cf)
垢版 |
2017/10/13(金) 01:03:16.23ID:bhKH08Ce0
VBAでテトリスとかロックマンが作れるなんで知らなかったわ
というか感動した。

それを実装するのに特別な環境が必要だと思ってたけど、VBAだけで実現できるところがすごい
2017/10/13(金) 08:26:56.51ID:CVhYo9e6d
exeを起動できないPCって何ができるの?
2017/10/13(金) 08:51:28.87ID:IDiztT7rx
>>642
コピペ
2017/10/13(金) 09:01:14.80ID:6i/UJdMU0
最大限好意的に解釈すれば、exeを直接起動するのは禁止って意味ではあるまいか
Excelを起動したい時はxlsファイルをダブルクリックするしかない、みたいな
2017/10/13(金) 10:43:30.84ID:CVhYo9e6d
>>643
つまりネット上のサンプルプログラムのコピペはOK、と
2017/10/13(金) 11:27:19.75ID:EVTVJC8ad
ガチガチの環境だとネットも許可されたURLしかアクセスできないんだよな
2017/10/13(金) 11:44:54.65ID:CVhYo9e6d
開発環境の話かな?
通常のオフィス環境で特定サイトのみOKてことないよね
NGなサイトがあるのはわかるけど。
2017/10/13(金) 12:13:04.97ID:fnGHp6s50
本来は未認可のプログラム関連全面禁止のところVBAが抜け道的に使われているだけって場合が多いだろうから、
他のプログラムを使ってはならないのは何故かっていう疑問に合理的な回答は無いだろうなぁ。
649デフォルトの名無しさん (ササクッテロラ Sp45-97Ee)
垢版 |
2017/10/13(金) 12:26:29.21ID:h1mGc1nrp
>>648
オフィスが許可されてるならvbaも許可されてるんじゃないの?

未許可プログラム禁止の理由はライセンスとかセキュリティとかが主な理由だと思うけど
ほかに何かある?
2017/10/13(金) 12:48:20.61ID:rxTt3wqUd
俺の知ってる会社でネット完全遮断のとこあるよ
とあるジャンルで世界トップのメーカーだからセキュリティがめっちゃ厳しい
建物に入る前に所持品チェックがあるしスマホやケータイは持ち込み禁止

ネット上のデータや情報が欲しい時は専門の部署に内容やURLを連絡して結果を知らせてもらうシステム
すごく効率が悪いと思うけど、それぐらいしないと機密が守れないそうだ
2017/10/13(金) 12:49:48.49ID:fnGHp6s50
>>649
VBAはオフィス製品を拡張するのが本来の役割だから、その範囲なら認可されていると言える。

表計算ソフトで(標準的に備わっていない)データベース処理させたり、データベースソフトで波形分析させたりといった、
そういう用途は厳密にはアウトなはずなんだけどVBA使う人間のほとんどがそういう本来用途から逸脱した使い方をするので、
この辺りの線引きが他のプログラムと曖昧になるから混乱するのではないだろうか。
652デフォルトの名無しさん (ササクッテロラ Sp45-97Ee)
垢版 |
2017/10/13(金) 12:57:07.42ID:h1mGc1nrp
>>651
VBAを使う人の殆どがって
何か調査結果とかあるの?
2017/10/13(金) 13:05:46.99ID:fnGHp6s50
>>652
本来用途的な使い方をする場合はVBA利用する必要が無いくらいには機能が揃ってるっていうのと、
このスレで他のプログラムが使えない事に対する明確な回答が出ない辺りからの推測だけど。

だいたいこのスレでも「お前が詳しいのはVBAであってエクセルではない」という戒めの言葉がたまに出るくらいだし。
2017/10/13(金) 14:31:58.61ID:imvGJ6egM
このスレでもIE操作とか何故にVBA?ってのがあるしね
2017/10/13(金) 15:27:59.93ID:qTuikjwpa
本来用途?
随分おかしなこというんだな。
何をやろうがそれが本来用途だろ。

アウトかどうかなんて結局は責任の問題だ。
セル操作でさえ会社に損害を与えることができるし、嫌だったらVBAを使うの辞めろ。

フリーソフトが問題なのは責任を問えないからだ。
VBAで問題が起きた時に、作った奴や部署が責任を取ることになるのはどんなVBAでも同じこと。
だから良く知りもせずに結果だけをコピペする奴は迷惑なんだ。
仕組みを理解すれば何をやっててもセルの操作と同じだ。
部署として作った奴を信用するかしないかの問題。
或いは部署として危険なコードか安全なコードかと判断できるかどうか。
2017/10/13(金) 15:39:50.72ID:Lgor6t1j0
>>654
おれもVBAでIE操作してクロールとかやってるけど、
趣味程度にプログラムをやってるだけなのでプログラム環境がVBAだけなんだよね
あと、取ってきたデータをそのままExcelに入れ、フィルタやソートを使ってデータ編集できる点も便利だよ
2017/10/13(金) 16:39:03.02ID:CVhYo9e6d
>>655
そうだよそうだよその通りだよ
フリーソフトやオプソは利用者責任として割り切る(/割り切らせる)しかない
658デフォルトの名無しさん (ワッチョイ 13d2-HnJS)
垢版 |
2017/10/13(金) 16:53:46.60ID:mP5bG6AS0
ExelVBAで、テキストファイルの書き出しをスレッドで行いたいですが、どうにかすれば
可能なものでしょうか?
Yes/Noだけでもいいので教えてください。
2017/10/13(金) 17:41:44.34ID:BvGB7kuQd
Yes
2017/10/13(金) 17:44:35.45ID:mP5bG6AS0
>>659
Vielen Dank!!
2017/10/13(金) 17:47:28.70ID:6GjwVIDm0
VBAにスレッドを扱う機能そのものはないけどな
2017/10/13(金) 18:25:28.31ID:fpikNhWdH
mainThreadだと思えば腹もたたぬわ!
2017/10/13(金) 18:58:06.78ID:/S7SJaNDa
>>654
ブラウザ操作だとどの言語が適してるんかね
664デフォルトの名無しさん (ワッチョイ 13eb-97Ee)
垢版 |
2017/10/13(金) 19:23:32.28ID:BvXBfgEq0
ブラウザからデータを取ってきた後の処理がエクセルだと簡単だからVBA使うんじゃね

またはその逆
665デフォルトの名無しさん (スプッッ Sd73-MKW1)
垢版 |
2017/10/13(金) 19:27:32.12ID:CVhYo9e6d
なんてわざわざブラウザ操作を挟むのかねえ
666デフォルトの名無しさん (ワッチョイ 13eb-97Ee)
垢版 |
2017/10/13(金) 20:04:09.22ID:BvXBfgEq0
>>665
動的コンテンツとかもあるからとかかな
667デフォルトの名無しさん (ワッチョイ 3396-z1uI)
垢版 |
2017/10/13(金) 20:05:44.35ID:7qyJlnS60
ブラウザからデータ抜き出すには何が一番適してるん?
668デフォルトの名無しさん (ワッチョイ 13eb-97Ee)
垢版 |
2017/10/13(金) 20:11:42.14ID:BvXBfgEq0
>>667
適してるってどんな基準で比較するのかによるんじゃね

どれもDOM操作するとかだろうから大して変わらない
自分の得意な言語でやればいいと思う
2017/10/13(金) 20:24:56.96ID:/S7SJaNDa
>>665
ネット上に落ちてるデータの集計とか?
テーブルで組んであるようなのならエクセルに落とすのも楽だし
2017/10/13(金) 20:50:35.51ID:rFlnU12Q0
>>665
htnmという概念を知らないのかもしれない
2017/10/14(土) 01:01:33.45ID:rdmEgd6Z0
>>667
インターネットエクスプローラーってやつ
2017/10/14(土) 15:22:42.26ID:+KU804tRa
>>661
スレッドを扱うことはできる。
不安定ですぐ落ちるだけ。
セルを触った途端に落ちると記憶している。
気をつければそこそこ安定してできることもあると思ってる。
Msgboxのボタンを押すようなことなら落ちないと思うけどプロセスでも同じことはできるからメリットを感じない。

>>667
InternetExplorer.Applicationは遅いと思う。
MSXML2.XMLhttpとかhtmlfileの方が速い。
ただし情報取得以外にクリックするとか操作するならInternetExplorer.Applicationを使うことになるかな。
Seleniumとか外部のオブジェクトは使わないんだよね。
673デフォルトの名無しさん (ササクッテロル Sp45-MeUd)
垢版 |
2017/10/14(土) 16:29:13.95ID:EZ8Tpyvpp
>>672
selenium使うならvbaは選択しないと思う

データ処理し易いからエクセル→VBA
クリックしたり操作しながら動的データを取るからブラウザ操作

python sqliteとか使う手もあるけど
実現したい事はどの手段でも実現できる
2017/10/14(土) 21:22:12.43ID:/BK34hqS0
ちょっと教えてください。ワークブックに含まれているマクロを起動時に実行する時
ThisWorkbookのWorkbook_Open()
あるいは標準モジュールでもauto_open
のどちらでも出来るような気がするんですけど、全く同じと考えていい?それとも何か違いがあるの?
2017/10/14(土) 21:23:25.61ID:no3ERhsP0
>>674
知らなかった
http://excel-ubara.com/excelvba4/EXCEL239.html
2017/10/14(土) 21:30:06.90ID:ZE/6L260a
auto_open知らんかったわ
2017/10/14(土) 21:30:35.09ID:/BK34hqS0
>>675
なるほど〜。Workbook_Openに統一しておきます。
リンク先教えてくれてthxです
2017/10/15(日) 21:08:10.21ID:6B+BNBuo0
ユーザーフォームに線を書く場合ってラベルを弄くる他にないですか?折れ線を書きたいのですが。
2017/10/15(日) 21:40:02.13ID:vDC+hW3+0
図の挿入は?
グラフなら以下の方法もあるみたい
http://www.max.hi-ho.ne.jp/happy/YNxv9d92.html

APIとかで頑張れば折れ線ぐらいなら掛けるけど、めんどくさそう
2017/10/15(日) 21:42:05.94ID:00064jpY0
測量系のサイトで測量した数値をExcelで図化するような
ものがあるはず そんなキーワードでググってみ
ものすんごいことしてるから CADかよ みたいな
2017/10/15(日) 22:13:27.13ID:Z02OjAp6a
>>678
デバイスコンテキスト弄る経験有るならめんどくさいけど色々できる。
LineToとか。
Win32APIに慣れてない人にはお勧めはしない。
2017/10/15(日) 22:24:31.38ID:6B+BNBuo0
書く線はこの程度のようなもので、表示して数値変更出来て、数値の合計算出するだけなんだけど
https://i.imgur.com/NxhLNnG.jpg
2017/10/15(日) 22:33:23.70ID:SP8+PvVZa
>>682
折れ線は固定じゃないんだよね?
2017/10/15(日) 22:41:19.36ID:+EgtYg1c0
EXCEL方眼紙に罫線で良い気がする
2017/10/15(日) 22:44:27.97ID:vDC+hW3+0
>>684
同意、フォームは使わない方が良いと思う
「この程度」と言ってるけどかなりめんどくさい作業
2017/10/15(日) 23:01:22.46ID:6B+BNBuo0
>>683
折れ線は固定です。
2017/10/15(日) 23:29:49.75ID:SP8+PvVZa
>>686
固定なら画像はって上にラベルでええやん
2017/10/17(火) 18:54:28.25ID:x5EvbHpMd
APIでフォームに線を書くまで行けました。
フォームに形状入力してFINDで検索して該当した行を右に空になるまで線を書き続けるコードにしました。
最初の一桁の数字は方向。4が左、6
が右という風に指示してます。

開始原点指定して、
線をLINETOで書いてて書いたらその近くにテキストボックスをADDで追加したいんですが、LINETOで指定した原点位置とテキストボックスのトップ、レフトで指定した位置がちょっとズレるのはなんかあるんですか?

https://i.imgur.com/FVhURv8.jpg
2017/10/17(火) 20:25:29.97ID:vT3liOjV0
秒単位で記録されてる1日分で数万件の動作ログから、時系列かつ動作種類別の棒グラフ的な物を作りたいんだけど、、、
仮に横棒にするとして一時間単位に別ても3600セルも必要になるわけだけど、こういうのってどうするのが良いの?
690デフォルトの名無しさん (ワッチョイ 13eb-MeUd)
垢版 |
2017/10/17(火) 21:06:12.48ID:T7W1uv5q0
>>689
ピボット
2017/10/17(火) 21:13:49.91ID:uTk+MSLEx
>>689
どう?
作ればいいでしょ
2017/10/18(水) 09:24:47.13ID:3iUoHYPK0
>>689
あきらめる
2017/10/18(水) 11:50:45.99ID:FuAFn2xc0
>>689
結論:無理。

次の人どうぞ〜
2017/10/18(水) 12:13:09.98ID:f7VGWmsn0
横棒グラフ的 じゃなくて横棒グラフそのものを作りゃいい
何故セルをグラフとして使うのかの理由が判らんと何ともいえないが
毎秒すべてのデータが必ず必要とも思えんが、間隔変えれば概略にできるし
特異点を知りたい とかなら数値を基準に求めるものだろうし、その部分の
前後をピックアップして表示するようにして なるべく判りやすいものに
するのがグラフ化の目的なんでは
2017/10/18(水) 13:44:45.35ID:pBm/jvOsa
データ吐き出して普通にグラフ作ればいいんじゃないの
何に悩んでるのかよくわからん
2017/10/18(水) 14:36:19.68ID:ra0RBv56a
>>688
試して無いから何とも言えんが、クライアント領域関連か、座標系の違いかな。
GetClientRectとかTwipsPerPixelでググってみる。違ったらごめん。

>>689
説明が分かりにくい。
3600のセルにデータが取れてるならそれを指定すれば良いということになる。
多分、3600セルという多量のデータだから適当な所で折り返してて1時間の00:00秒から59:59秒の流れを持ったまとまりとして認識させることが出来ないとかかな。
良く分からんが各秒の値でプロットする訳じゃ無いわけだし、平均とか取るもんじゃないの?
697デフォルトの名無しさん (ワッチョイ ddb3-aYWJ)
垢版 |
2017/10/19(木) 21:49:18.11ID:7IrXkeDg0
ビットコインの公開APIから値段を取る方法ってありませんかね
パワークエリ使ってたんですがプロトコル障害で使えなくなってしまい....
2017/10/20(金) 07:03:05.09ID:3rm9dGiJ0
フォルダ内にあるファイルのすべてを対象に、
ファイル名の最後を「_ou.mp4」に変更するマクロを作ってください。お願いします。

例)〇〇.mp4 → 〇〇_ou.mp4
2017/10/20(金) 07:06:51.11ID:3rm9dGiJ0
【追加】
ただし、すでに「_ou.mp4」に変更されたファイルは、何もしないこと。

悪い例) 〇〇_ou.mp4 → 〇〇_ou_ou.mp4  こうならないように。
700デフォルトの名無しさん (ワッチョイ 7aeb-KyXl)
垢版 |
2017/10/20(金) 07:36:34.81ID:wf1d5/480
>>697
公開APIのプロトコル障害なら公開APIでは取れないって事じゃないの?
701デフォルトの名無しさん (ワッチョイ 7aeb-KyXl)
垢版 |
2017/10/20(金) 07:37:08.93ID:wf1d5/480
>>698
ココナラで買え
2017/10/20(金) 07:43:57.15ID:Al7I9KCp0
>>698
作ってみたら五分くらいで出来たわ。
2017/10/20(金) 08:52:14.89ID:7WZYjezK0
その程度は自分で調べようよ
2017/10/20(金) 09:16:48.80ID:h7aVEIq70
ls | Where-Object { $_ -like "*.mp4" -and $_ -notlike "*_ou.mp4" } | Rename-Item -WhatIf -NewName { $_ -replace '\.mp4$','_ou.mp4' }

PowerShell で書いたので、そのフォルダへ移動してから実行して。
-WhatIf が付いているので、本当には実行せずに、結果だけを見れる。
本当に実行する際は、-WhatIf を削除して実行して

-like は一致するもので、-notlike は一致しないもの。
正規表現の \.mp4$ で、. に \ を付けているのは、
. の特殊な意味をなくして、普通の文字として扱うため(エスケープ)

x.mp4 → x_ou.mp4

ただし、x.mp4, x_ou.mp4 が、同じフォルダ内にある場合は、
変換できずにエラーになるかも
705デフォルトの名無しさん (オッペケ Sr85-2MXH)
垢版 |
2017/10/20(金) 12:21:32.47ID:GcA5ZrMsr
パワーシェル面倒くさw
2017/10/20(金) 12:35:46.95ID:yLtxI7rs0
>>704
正規表現使えるんだからWhere-Objectいらんでしょ
2017/10/20(金) 12:50:10.77ID:RDZrWMpbM
>>705
他の言語でもっと短く書けるぜ
ってか?
2017/10/20(金) 13:06:50.73ID:gM7OZlf+a
>>699
filesystemobjectのインスタンス取得
フォルダ取得
フォルダ内のファイルを精査
mp4のみ抽出
拡張子取得
拡張子を除いて指定の文字列を追加した文字列を取得
ファイル名変更

これでわかれ
2017/10/20(金) 22:34:12.97ID:kBDqzUF8a
dir関数とNameステートメントでループが一番簡単じゃね?
サブフォルダ考えなくて良いんだしさ。
710デフォルトの名無しさん (ワッチョイ cee7-bcII)
垢版 |
2017/10/21(土) 00:29:32.54ID:YcOLTnbA0
explorerのアドレス欄にcmd入れて
ren *.mp4 *_ou.mp4
とかじゃなかったっけ
711デフォルトの名無しさん (ワッチョイ cee7-bcII)
垢版 |
2017/10/21(土) 01:08:37.57ID:YcOLTnbA0
制約があったか じゃ3行で
ren *_ou.mp4 *._oump4
ren *.mp4 *_ou.mp4
ren *._oump4 *_ou.mp4
712デフォルトの名無しさん (アウアウカー Sadd-2iY5)
垢版 |
2017/10/21(土) 14:00:51.60ID:zr63QsaMa
質問失礼します
あるフォルダ内に数千件のファイルが格納されていて、そのフォルダに新規ファイルが入ってきたときにそのファイルを抽出(ファイル名を取得)したいのですが一番高速に処理を行うにはどうしたらいいでしょうか
2017/10/21(土) 14:26:45.14ID:g0QdWsyQ0
ある範囲からある範囲を引くメソッドとかあります?
2017/10/21(土) 14:28:29.39ID:Lw+b7FQG0
何を引くのか
2017/10/21(土) 14:42:36.65ID:1S4flzcv0
>>712
「新規ファイルが入ってきた時」という条件がハッキリしないけど、
いずれにせよ最終的に全て取得して比較する方法しかないと思う。
2017/10/21(土) 15:42:56.99ID:Rc5tdsj/x
>>713
ある
2017/10/21(土) 16:05:57.28ID:A/wcpvZBa
>>712
高速がどうとかよりまず新規にファイルが入ってきたことをどう検知するつもりなんだ
2017/10/21(土) 16:31:14.14ID:fkuXV6f/0
>>712
使ったことないけどこの辺を見ればいいんじゃね?
https://msdn.microsoft.com/ja-jp/library/windows/desktop/aa365261(v=vs.85).aspx
2017/10/21(土) 16:34:56.72ID:ZBz0JWdz0
>>716
えっ、あるの?
IntersectやUnion使って自作してたわ
2017/10/21(土) 16:44:02.49ID:PDN1DZ7z0
範囲指定同士をハイホンで繋ぐだけでしょ?違うの?
721デフォルトの名無しさん (オッペケ Sr85-37LT)
垢版 |
2017/10/21(土) 16:56:56.02ID:Uf1MTp5vr
白雪姫?
2017/10/21(土) 17:09:30.41ID:OMKOgYJkd
ハイホーハイホー
723デフォルトの名無しさん (ワッチョイ 7aeb-KyXl)
垢版 |
2017/10/21(土) 19:08:51.19ID:Py32WHo50
>>712
基準となる時点のファイル名一覧をシートに記録しておく
比較時点のファイル名一覧を別のシートに記録する
vlookupとかで同じファイル名があるか調べる
2017/10/21(土) 19:18:24.44ID:g0QdWsyQ0
>>716
是非教えてほしいです
2017/10/21(土) 20:25:27.79ID:GpNG7wtI0
>>712
業務で行き詰ったらまず上司に相談したら?
2017/10/21(土) 21:48:50.23ID:ZBz0JWdz0
>>712
フォルダをモニタリングするツールが色々とあるからそれ使うといいよ
たいていファイルシステムイベントで処理してるから
自分で比較するのに比べれば数桁高速だと思う
2017/10/21(土) 22:03:01.22ID:ZBz0JWdz0
>>720
それよく分からないから教えて。

例えば
Set minuend = Union(Range("C3", "D5"), Range("D4", "E6"))
Set subtrahend = Range("A2", "A4").EntireRow
Set expected = Union(Range("C5", "D5"), Range("D5", "E6"))
の場合に
minuend - subtrahend = expected になるようにしたいんだけど
2017/10/21(土) 22:42:22.44ID:WjgPnmAb0
>>726
またまたソフトのインストールが制限されて〜なんて言い出す悪寒
729デフォルトの名無しさん (ワッチョイ 3dea-REa2)
垢版 |
2017/10/21(土) 23:00:04.56ID:MeuVmzom0
勝手にインストールできないなら許可貰えば済む話なのにな
業務上必要なら許可降りるだろ
2017/10/22(日) 00:01:17.12ID:ASqT9k9u0
「前の担当者は手作業でこなしていました。あなたにもできるでしょ?電卓は許可します」
2017/10/22(日) 00:24:23.73ID:ZA2xPhwp0
それ作って給料もらっているんだったら自力でやれば?
732デフォルトの名無しさん (ワッチョイ ddb3-0MKJ)
垢版 |
2017/10/22(日) 01:10:16.60ID:ZsHOZNag0
それ作って給料もらってる人がこの板にいるわけない。
せいぜいマ板がいいところ。
2017/10/22(日) 01:15:09.08ID:3ymZg3xq0
>>712
ロバストコピーでフォルダのコピー
その際に何を新たにコピーしたのかをログに書き出すオプションを設定しておく
そのログを読みこんで後はお好きに処理
勝手に上書きされたり、勝手に消されてもバックアップ取れてて一石二鳥
2017/10/22(日) 02:50:21.11ID:rLFHcAK90
>>733
要件次第だけどrobocopyでも十分かもね
フォルダ監視オプション使えば細かいタイミングもコントロールできるし
2017/10/22(日) 09:58:34.69ID:9vQ4rkSY0
vbaでやるよりはタスク組んでバッチ的に処理する案件の予感
2017/10/22(日) 10:06:24.11ID:ASqT9k9u0
日記

今まで動いてたマクロがエラーで止まった
テキストファイルの内容を調べてリネームするだけの簡単な物なのに、調べたらファイル名にユニコードが入ってた
10年ぐらい前に作った物なので、今さら対応するのめんどくさいなあ。これも時代か

どうせ台風でヒマだからちょっとやってみるか
2017/10/22(日) 18:49:27.12ID:ZA2xPhwp0
台風なくてもヒマなくせに
738名無しさん@そうだ選挙に行こう! Go to vote! (ワッチョイ baa4-V3Kl)
垢版 |
2017/10/22(日) 19:16:04.56ID:bE/NxZx30
>>737
自己紹介ですか加齢臭ジジイさん
2017/10/22(日) 20:08:28.86ID:ZA2xPhwp0
>>738
加齢臭対策に消臭剤置いてるから平気
740デフォルトの名無しさん (ワッチョイ 5103-2MXH)
垢版 |
2017/10/22(日) 22:49:10.62ID:Nb0y5KGU0
突然のヒマシジイvs加齢臭ジジイ対決w
2017/10/23(月) 18:08:04.19ID:iGj4ThY4d
フォルダに複数のシートが入っていて、それぞれ○○.xls(○は名字)のファイルがあって、それの○○(○は名字)のシートのみを繰り返し検索、抽出を繰り返すにはどうしたらいいですか?

指定シートのみ繰り返し検索の仕方をご教授お願いします。

file = Dir(path & "*.xls")

Do While file <> ""

Set book = Workbooks.Open(path & file)

For Each sheet In book.Worksheets

Set f = sheet.Cells.Find(kwd,LookIn:=xlValues, lookat:=xlWhole)

If Not f Is Nothing Then

firstAddress = f.Address

rowtar=f.row

列の転記開始。
2017/10/23(月) 19:29:34.06ID:hFeDPnm20
自分で勝手に名前を定義すんのやめれ。
それはシートじゃなくブックだろ

file = Dir(path & "○○(○*.xls")
で○○(○が先頭にあるファイル(この場合はブック)が取り出せるだろ?
ワイルドカードの意味判ってる?
743デフォルトの名無しさん (スプッッ Sd7a-6gne)
垢版 |
2017/10/23(月) 19:32:17.16ID:wgR6kE8Td
確かにブックのことをシートと呼ぶ人は結構いるイメージ
744デフォルトの名無しさん (ワッチョイ 7aeb-aYWJ)
垢版 |
2017/10/23(月) 19:36:45.84ID:dkpshLIu0
>>741
シート名が判っているなら
for each で探さなくても
set ws = Thisworkbook.worksheets(シート名)
でいい
2017/10/23(月) 22:12:49.61ID:zesBlYdJa
>>712
http://madia.world.coocan.jp/cgi-bin/VBBBS2/wwwlng.cgi?print+200602/06020015.txt

他にもReadDirectoryChangesWを使った外人のサンプルは動いた。
けど、スレッド作ってるから危険なコードだね。
分かってる人が使う分には良いのかも知れないけどスレッド作らない方法を模索した方が良いんじゃないかなあ。
2017/10/23(月) 22:32:40.42ID:FJmDe6QEd
>>712
dirの結果をリダイレクトしてファイルに書き出し
またdirして前回の結果とfcする
繰り返し
2017/10/24(火) 03:37:52.60ID:DfsEXCLh0
そのフォルダを、watch・見張る事は、できないのか?

そのフォルダに変化が起きたら、知らせる機能
2017/10/24(火) 03:59:56.10ID:I+Ci2byo0
>>747
個人のPCならフリーソフトでも探した方が早いと思う
2017/10/24(火) 07:51:07.93ID:IEYUp2Hxp
>>741
なんか要件とソースが違くない?

Findとかkwdは何してるの?
2017/10/24(火) 07:56:53.59ID:tcbOLwSB0
>>748
早いか遅いかじゃなくて、VBAでやる方法が知りたいんだろ
751デフォルトの名無しさん (ワッチョイ 7aeb-KyXl)
垢版 |
2017/10/24(火) 07:57:40.89ID:PJuVne9A0
>>747
タスクスケジューラで定期的に調べるコードを動かす
2017/10/24(火) 08:03:29.43ID:s8DNo2tea
>>747
恐らく無理じゃね
あったら知りたい
2017/10/24(火) 08:05:07.52ID:rZrDUnVP0
>>712は条件が不明すぎる上、質問者はいなくなってしまった
これ以上続けてもしょうがない
2017/10/24(火) 08:51:30.78ID:wGosvaz7d
アンケート入力してもらった内容を別シートのA1セルから下に書き込んでいく仕様です。そして、それが共有ファイルだとします。
共有の場合、同時にA1セルに書き込む可能性があります。
既に書き込みされていた場合、一つ下のセルに書き込むようにしてエラーを回避したいです。
どうしたら良いでしょうか
2017/10/24(火) 10:17:55.24ID:mH/THH+ia
>>754
共有をやめる
vbaでやれるなら共有にする意味を全く感じない
756デフォルトの名無しさん (ワッチョイ d681-0MKJ)
垢版 |
2017/10/24(火) 12:00:22.20ID:uQQcXNnv0
VBAのオートフィルタの構文について
構文例以下のコードになっているのですが、課題としては文字列の抽出で
オートフィルターを使用して、「商品名」が「パソコン(ノート)」のデータを抽出するコードを記述しなさい。
となっているのですが記述方法がわかりません。
教えてください。
C3からが商品名のオートフィルタになっています。
Dim TargetCompany As String
Dim StartDay AS Date
Dim EndDay AS Date

TargetCompany = "○○株式会社"
Starday = #10/1/2014#
Endday = #10/31/2014#

With ThisWorkbook.Worksheets("受注データ")
   .Range("B9").AutoFilter Field:=1,Criterial:">=" & Clng(StartDay)_
,Operator:=xlAnd,Criteria2:="<=" & Lng(EndDay)
.Range("B9".)AutoFilter Field:=2, Criteria1:=TargetCompany
End With
757デフォルトの名無しさん (ササクッテロロ Sp85-KyXl)
垢版 |
2017/10/24(火) 12:21:39.09ID:SXPDSp16p
>>754
webアプリにする
758デフォルトの名無しさん (ササクッテロロ Sp85-KyXl)
垢版 |
2017/10/24(火) 12:26:01.19ID:SXPDSp16p
>>754
データを格納するファイルと
そのデータを管理するファイルに分ける

データを管理するファイルでVBAを動かし
データを更新するときは更新中か否か判別する値を持つ

DBとDBMSのような関係
759デフォルトの名無しさん (ササクッテロロ Sp85-KyXl)
垢版 |
2017/10/24(火) 12:29:03.80ID:SXPDSp16p
>>756
マクロの記録でオートフィルタの記録をとって見比べる
2017/10/24(火) 12:44:07.31ID:4VNEc1KXM
>>752
>>718
VBA でやるにはハードル高いかも
2017/10/24(火) 13:12:35.37ID:mH/THH+ia
>>760
C♯とかだとイベント検知できたような気がするけど
2017/10/24(火) 14:18:38.15ID:wq0WCN150
c#とか使わなくてもvbsでフォルダ監視するファイル作って実行させとけばいけるんじゃない?
c#かvb.net使っていいならFileSystemWatcher使えば希望通りのことが出来ると思います。
2017/10/24(火) 15:13:31.99ID:+GLe08ON0
>>762
できるかできないか、じゃなくて、
やり方を具体的に頼む
2017/10/24(火) 15:15:31.49ID:RrgGTSJsa
>>741
いや、だから既にVBAでも出来てるし。
ハードル高いかどうかは組む人のスキル次第でしょ。
2017/10/24(火) 15:50:11.86ID:mH/THH+ia
>>763
今までのやり取りである程度推測できないならスキルが足りてないだけでしょ
2017/10/24(火) 16:08:30.01ID:cjHIRFnx0
フォルダをウォッチする機能を
Excelに持たせようとすること自体がセンス悪い
2017/10/24(火) 16:13:02.09ID:dMhREPrI0
Book1 Sheetあ Sheetい Sheetう Sheetえ
Book1 の Sheetう の中にボタンを作って、そのボタンを押すとエクセルの任意のブックを参照して
参照したブックのSheet1の内容をすべてコピーして、Book1の Sheetあ のA1を起点に張り付けたいです。
ご教授お願いします
2017/10/24(火) 16:15:19.30ID:IEYUp2Hxp
永久ループに適当にスリープ咬ませて、シートに列挙したファイル名と付き合わせるくらいかな?
高速かどうかはわからないけど
2017/10/24(火) 16:22:17.63ID:B2D33UKaa
>>767
任意のブックとは常に決まったブックなのか、
それともその都度変わるのか?
変わる場合は、どうやって指定するのか。
770デフォルトの名無しさん (ワッチョイ f9cc-AYzn)
垢版 |
2017/10/24(火) 16:28:26.33ID:dMhREPrI0
>>769
その都度変わります。
ですのでファイルを参照するウィンドウを開いて指定する方法ができると嬉しいです
2017/10/24(火) 17:46:03.13ID:B2D33UKaa
それ自体は難しくないと思います。
あとは、コピー元のブックがあるフォルダが決まってるかとかで多少変わってくるかと。
例えば常にカレントフォルダにあるとか、コピー先のブックと同じとか。
2017/10/24(火) 20:30:24.34ID:4VNEc1KXM
>>761
そりゃC#使えるならSystem.IO.FileSystemWatcherクラスを使えばいい
でもここはVBAスレだし
https://msdn.microsoft.com/ja-jp/library/system.io.filesystemwatcher(v=vs.110).aspx
2017/10/24(火) 21:16:13.10ID:wq0WCN150
>>763
vbs

myFLD1 = "C:\監視フォルダ"
myFLD2 = "C:\コピー先"
myLimit = 3 '3分間監視する

Msgbox "監視スタート"
myTime = DateAdd("n", myLimit, Now)
myMEM = ""
With CreateObject("Scripting.FileSystemObject")
For Each myF In .GetFolder(myFLD1).Files
If InStr(1, myMEM, myF.Name & vbTab) = 0 Then
myMEM = myMEM & myF.Name & vbTab
End If
Next
Do
For Each myF In .GetFolder(myFLD1).Files
If InStr(1, myMEM, myF.Name & vbTab) = 0 Then
myMEM = myMEM & myF.Name & vbTab
.CopyFile myF.Path, myFLD2 & "\"
End If
Next
WScript.Sleep 500
If myTime < Now Then Exit Do
Loop
End With
Msgbox "END"
2017/10/24(火) 21:20:32.78ID:wq0WCN150
>>763
vbsのサンプルなんでコピー処理を自分のやりたい処理に変えてみて下さい。
c#かvbなら上の人がリンク貼ってある先みるといいですよ
2017/10/24(火) 23:00:43.39ID:DfsEXCLh0
タスクランナーのGulp, Grunt, Jenkins とかを使えば?

毎秒フォルダ・ファイルを、watch して、タスクを実行する。
タスクでエラーが起きると、watchを解除する

タスクランナー → アプリ

自分でプログラミングすると、逆になる。
アプリ → タスク

エラー処理も、難しい
776デフォルトの名無しさん (ワッチョイ 7aeb-KyXl)
垢版 |
2017/10/24(火) 23:04:46.31ID:PJuVne9A0
タスクスケジューラでいいように思うけど
2017/10/25(水) 02:23:47.05ID:Pns1W9gd0
さっさと諦めればいいのに
2017/10/25(水) 02:31:56.07ID:wjy6ng+H0
盛り上がってるんだから、話題に入れないお前が諦めりゃいいんだよ
2017/10/25(水) 08:15:57.43ID:K0iADaTOa
>>772
VBAじゃ実用的なものは無理でしょって言う遠回しなお断りなんだが
まだvbsの方が現実的
780デフォルトの名無しさん (ワッチョイ d681-0MKJ)
垢版 |
2017/10/25(水) 16:02:07.00ID:4LLWyKan0
VBAのステータスバーの表示方法について
課題でステータスバーを表示しなさいとなっているのですが割り算の問題?
なのかうまくひょうじできません。
基本は
Application.StatusBar = String(i, "■") & String(10- i, "□")
上記のコードでいいと思うのですが、
ステータスバーに進捗を表す"■"を表示する。表示する"■"の数は変数iの値を100で割った値とする
この、"■"の数は変数iの値を100で割った値とするの部分がうまくいきません。
やってみたのは下記のコードです
Application.StatusBar = String(Int(i / 100), "■") & String(Int(i / 100), "□")
ちなみに、Forの繰り返しは1から500です。
781デフォルトの名無しさん (ワッチョイ 3a0e-HarP)
垢版 |
2017/10/25(水) 16:21:09.87ID:Qf3oRisb0
ちょっとお知恵を拝借したいと

Excel 2010で作業をしているのですが、
大量にあるシートにある非表示セルをとある事情で全て削除したいのです。

ただし、
・どの行・列が非表示になっているかはシート毎に異なる(むしろ、消したい行・列を非表示にして、マクロで消すことが考えられる)
・場合によってはSpecialcells(xlCellTypeLastCell)で拾えるセルより下/右の行/列が非表示になっている可能性がある
 (使用されているセルはAD250までだが、非表示セルがAF列や300行に設定されていると上手くいかない。
  または、AA:ADが非表示だとZ列が拾われてしまう。)
・どれくらい下/右まで使用されているかは必ずしも分からない(さすがに、1000行は使わないと思うが、断言できない)
という問題があります。

数十から百程度のシートがあるので、10000行500列のような数を処理するのは時間がかかるため、
できる限りチェックは最小圏で済ませたいのですが、いい方法はありませんでしょうか。
2017/10/25(水) 16:54:42.17ID:FTD//1X/0
>>781
ブックをzipとして解凍して出てきたxml
(\Book\xl\worksheets\sheet1.xml とか)
の中身みると
<col min="16374" max="16374" width="0" hidden="1" customWidth="1"/>
みたいな感じでどの行、列が非表示なのか書いてあるからそれを拾うとかどうよ
2017/10/25(水) 16:59:56.89ID:0GYD+24d0
>>780
>Int(i / 100)

をDebug.Printしてみる
2017/10/25(水) 17:08:25.65ID:0GYD+24d0
>>781
ドキュメント検査の中に非表示の行・列を削除する機能がある

VBAなら
If Columns(ColumnNumber).Hidden = True Then Columns(ColumnNumber).EntireColumn.Delete
If Rows(RowNumber).Hidden = True Then Rows(RowNumber).EntireRow.Delete
をそれぞれ列数・行数分
785デフォルトの名無しさん (ワッチョイ 3a0e-HarP)
垢版 |
2017/10/25(水) 17:24:35.66ID:Qf3oRisb0
>>782
xmlにそんな記載があるんですか。
確かにそれなら出来そうですが、それを解釈させるマクロを書くのは面倒くさそうな感じですね
それに、拡張子をzipに変えるとxmlが取り出せるというのを知らない人は多そう
(自分が使うために作るんですが、欲しいと言ってる人にあげる予定なので、難しいことは抜きにしたいかな…)

>>784
実務的にはそれを For … To … Step -1 で回すか>>782で調べたものを使うんでしょうが、
そこが問題なんですよね…

ところで、Columns(ColumnNumber)ってRangeオブジェクトを返すと思うのですが、
EntireColumnが必要なんですか?
いえ、Rows、Columnsあたりはよく分かってない部分があるので、自分の認識不足かも知れませんが。
786デフォルトの名無しさん (ワッチョイ 3a0e-HarP)
垢版 |
2017/10/25(水) 17:27:57.53ID:Qf3oRisb0
>>784
(VBAに目が囚われて、非表示検査のことをすっかり忘れてた)
こちらは、あとでいじってみます。
そんな便利機能があったのか…
2017/10/25(水) 17:37:26.49ID:FNFMgMk+a
>>780
良く分からんが■と□の数が同じで良いのか?
どっちもInt(i/100)個表示するようになってるが。
最初の例では□は10から■の個数を引いてたよね。
2017/10/25(水) 17:44:03.77ID:0GYD+24d0
ブックが大量にあるならドキュメント検査の機能をVBAから起動することもできるみたいよ

Set di = book.DocumentInspectors(3)
di.Fix Status, Result

DocumentInspectorsコレクションの3がHidden Rows and Columnsだってさ
2017/10/25(水) 17:57:35.27ID:FNFMgMk+a
xlCellTypeVisibleで表示されてる領域が取れるね。
で、それ以外が非表示ということで、指定領域以外の領域を返す関数作ればいけると思うのだけど。
2017/10/25(水) 19:49:21.08ID:mmbso5lGM
>>779
>>773程度ならVBAでも同じようなもんだし、今時vbsでやるくらいならPowerShellなりC#の方がマシ
791デフォルトの名無しさん (アウアウカー Sadd-2iY5)
垢版 |
2017/10/25(水) 19:52:49.91ID:vc+eFbWaa
そりゃライブラリ揃ってるC#でやりゃ簡単なのはわかってる。
VBAでなんとか出来ないか?ってのが醍醐味でしょ
792デフォルトの名無しさん (ワッチョイ 5103-PvcH)
垢版 |
2017/10/25(水) 20:04:16.54ID:1SuU76Ul0
このキモさ只者じゃない
793デフォルトの名無しさん (ワッチョイ baa4-V3Kl)
垢版 |
2017/10/25(水) 20:28:12.47ID:uuTKo/W80
>>790
PowerShellには違和感ありまくり。なんか「覚えよう」と言う気になれない。どうせならC#を統合して欲しかった。
2017/10/25(水) 21:18:11.90ID:/5iNSkw80
>>791
VBAで苦労したいなら>>718のリンク先をVBAで実装するだけでしょ
いまさら醍醐味とか言われてもね
2017/10/25(水) 21:57:34.79ID:0GYD+24d0
Excel起動中だけフォルダ監視したい状況ってどういうケース?
それなりの信頼性が必要なら稼働監視も必要になってくる

VBAでやるならわざわざwin32使うより
新旧状態比較のほうがまだいい気がするけどね
2017/10/25(水) 21:59:06.19ID:0GYD+24d0
>>789

>>713のRangeからRangeを引くメソッドが役立つね
2017/10/25(水) 23:07:42.90ID:ajJCRl8ia
>>790
いちいちエクセル立ち上げなきゃできないvbaなら見た目には見えないvbsの方がマシじゃね
クソかミソかみたいな話だが
まあそもそも俺はC♯等々でやるべきと言う派閥
2017/10/26(木) 02:53:53.87ID:GiV8M1tl0
Excelしかできない人ってかわいそう
2017/10/26(木) 07:01:20.13ID:vRQ6cy4b0
バッチ処理ならvbsがいいけど、エラーログやらなんやらって思うと結局エクセルvbaの方が便利すぎて
2017/10/26(木) 07:06:29.21ID:oyaJ8gC3M
>>795
> Excel起動中だけフォルダ監視したい状況ってどういうケース?
> それなりの信頼性が必要なら稼働監視も必要になってくる
醍醐味とか言ってる奴に実用性求めてどうするよ w

> VBAでやるならわざわざwin32使うより
> 新旧状態比較のほうがまだいい気がするけどね
理由は?
自分がそれしか理解できないからってこと?
801デフォルトの名無しさん (ワッチョイ 930e-lHwk)
垢版 |
2017/10/26(木) 07:48:52.20ID:xxnSYJ9G0
>>788
そんなこと出来るんだ…
検査中はマクロは止まるんですかね…?


>>789
その考え方はなかったですね
これはこれで、やり方を考えてみます
2017/10/26(木) 11:25:46.03ID:HWdjovEla
ようはExcelの処理の中で高度なことが必要になったわけで、単独なら他の言語でも良いわけだ。
じゃあ高度だからといって他言語と連携させるのが良いと考えるのか、それともそれはカッコ悪いと考えるのかという話だと思う。
それと、その人にとってどれくらい高度なのかによって変わる。

俺はカッコ悪いと考える派なんでWin32APIを使うね。
別に苦でもない。

ただ、そもそもフォルダ監視が本当に必要なのかは疑問。
初心者の質問は結構、無理を通そうというものが多く、仕様を見直すとそんな機能は必要無かったとなることも多い。
2017/10/26(木) 11:49:24.76ID:7XpeFsmi0
適切な要求仕様を考えるのも、また一つの技術だからね。
804デフォルトの名無しさん (ワッチョイ eb81-YYNr)
垢版 |
2017/10/26(木) 13:02:27.20ID:PA9kc1XX0
初歩的な質問ですが、コードを記入して間違ったときに記入するときに削除をすると
通常の削除ではなく、そのスペースがなくなり上書きのようなものになり
直そうとするとそこから全ての文を打ち込みし直さないといけない状態ですが
通常の文のように削除、追加するようにはどうしたらいいでしょうか?
2017/10/26(木) 13:06:20.32ID:uULs3yACd
>>804
プログラミングというのはコンピューターに対する処理手順の説明
お前みたいな説明の下手な奴はセンスないからプログラミングやめろ
806デフォルトの名無しさん (ワッチョイ eb81-YYNr)
垢版 |
2017/10/26(木) 13:13:32.91ID:PA9kc1XX0
>>805
雑談スレでもなく、質問スレでそんなにキャンキャン切れるのはプログラミング
向いてないからやめたら?
2017/10/26(木) 13:17:43.11ID:GZLf9rraa
>>806
どちらにしてもなにいってるかわからないからやり直し
2017/10/26(木) 13:25:12.24ID:7XpeFsmi0
どっかでInsキー押し間違えて入力モードが切り替わってるんじゃないの。
2017/10/26(木) 14:17:19.57ID:rDx4+zqZa
>>804
>>805の言ってることは厳しいし、説明の上手い下手がセンスに直結してるとは思わないけど、初心者の人は説明が下手で回答を遠ざける人が非常に多い。
少しは文章を推敲すべきじゃないかな。
相手のエスパーを期待するってのは結局人にやらせたいってだけと受け取る人もいるだろう。

テキト−に考えてるのか分からないけど、自分の問題となってるコードをそのまま質問者に丸投げしたり、やる気が感じられないんだよね。
2017/10/26(木) 14:17:36.25ID:94hkv9myM
質問する側がこんなキチガイみたいな煽りする時点で答える必要はない
811デフォルトの名無しさん (スプッッ Sd73-Gmo/)
垢版 |
2017/10/26(木) 14:36:54.90ID:3HeaIUwTd
こういうおかしな日本語を見ると漠然とした不安を感じる
現象としては>>808だと思うけど
2017/10/26(木) 14:49:54.73ID:GZLf9rraa
なんつーか改行もおかしい
糖質っぽい
2017/10/26(木) 16:04:18.61ID:EuBqxPU00
お前らスルー耐性無さすぎw
814デフォルトの名無しさん (ワッチョイ 8903-/3V2)
垢版 |
2017/10/26(木) 16:54:30.02ID:FgkSJLUp0
このスレは自分が答えられない質問をする奴は基本貶す方針で運営されてるからな
815デフォルトの名無しさん (ワッチョイ 13eb-Rdnx)
垢版 |
2017/10/26(木) 17:12:20.63ID:Jtc4NubG0
>>814
その方針とやらに従うかどうか
決めているのは自分だろ

勝手に答えてやればいい
2017/10/26(木) 18:40:53.23ID:n0QyVGSVx
powershellはおっそいのがね...
2017/10/26(木) 19:44:24.92ID:LTZyjypE0
>自分の問題となってるコードをそのまま質問者に丸投げしたり、やる気が感じられないんだよね。

まだ良いほうだよ、それ。w
とにかくコードも示さずエラーがエラーがってどんなエラーが出てるのかも示さずな奴も居たからな
2017/10/26(木) 20:47:10.77ID:wB508HAVa
>>814
そら答えられんわ
日本語としておかしいんだから
2017/10/26(木) 21:47:23.55ID:spYnWPpM0
初心者です。
同じフォルダ内の複数のExcelファイルをひとつにまとめたいのですが、方法を教えていただければうれしいです。
2017/10/26(木) 21:53:25.01ID:Mz98JUDex
>>819
シートに全部まとめて保存します
その後余分なファイルを削除します
2017/10/26(木) 22:11:22.87ID:oyaJ8gC3M
>>816
なにやってるのか知らんけどスクリプト言語としては十分な性能だと思うが
2017/10/26(木) 22:14:00.17ID:oyaJ8gC3M
>>819
zipフォルダにぶちこめばいいんじゃね?

って言われたくなきゃもっとやりたいことをきちんと書かなきゃダメだわな
2017/10/26(木) 22:23:16.30ID:zf5GxGXS0
>>822
いい返しだな
2017/10/26(木) 23:05:18.78ID:n0QyVGSVx
>>819
エクセルブックをまとめると一口で言っても、シートを一つのブックにまとめたり、データを一つのテーブルにまとめたり、いろんな解釈が成り立ちうる
というか、エクセルブックをまとめるというのは、何らかの作業目的を達成するための手段だろう?
初心者は自分でイメージしている手段の実装方法を質問するんじゃなくて、目的から説明して最適な方法を質問した方が良いぞ
2017/10/26(木) 23:08:11.48ID:n0QyVGSVx
>>821
CUIで動くコマンドとして捉えるとやっぱり遅いし、ワンライナー書くには便利だけどそれ以外のメリットがあまり実感できないんだよな
2017/10/26(木) 23:23:07.52ID:G+Co1V6V0
PSはともかくとして.NETにメリットを感じないなら
そりゃ使う理由ないよね
827デフォルトの名無しさん (ワッチョイ 8903-xLv1)
垢版 |
2017/10/27(金) 00:53:12.33ID:7fFHnBnT0
あのクソめんどくせえバワーシェルでワンライナーとか正気の沙汰とは思えんな
2017/10/27(金) 05:05:02.11ID:jmKj26SQ0
PowerShellの話題はPowerShellスレでやるんだ
2017/10/27(金) 08:53:24.35ID:rmB0za9r0
ワークシート関数とプログラムの組み合わせで複雑な計算も簡単に書けるというexcelvbaの長所を活用しようよ
2017/10/27(金) 16:38:23.21ID:RqN3wtztM
( ・ω・)∩シツモーンです


最近ティンコが痒いんですが
どうすれば良いでしょうか
教えてくさい
2017/10/27(金) 16:54:33.12ID:mlXsQQEK0
>>830
風通しをよくするのが重要です
陰毛を剃ってノーパンで過ごして下さい
2017/10/27(金) 18:35:12.89ID:GaUS+r+3M
>>830
無水エタノールでもかけときゃ治るやろ
どうなっても知らんがな
2017/10/27(金) 19:48:16.15ID:z4zr2FxK0
>>830

Do Until ティンコ = 痒くない
Call ティンコ掻く
Loop
834デフォルトの名無しさん (ワッチョイ 8903-/3V2)
垢版 |
2017/10/27(金) 19:50:55.26ID:7fFHnBnT0
男のくせにティンコとかぼかして言うやつw
2017/10/27(金) 20:19:11.74ID:r31OO9Bna
>>833
途中でオーバーフローして出血しそうなコード
2017/10/27(金) 21:33:06.91ID:cIkV9qHA0
まずは医師の診断を受けろ
最近東南アジア行ったんだろ?
2017/10/27(金) 21:52:19.37ID:9goOwbvB0
VBAでサジェスト機能?をやりたいのですが、フォームにコンボボックス1を配置してシート1のA列にあるリストを一文字入力したらコンボボックスに候補が出るようにするコードが知りたいです。

欲を言えば、『田』と入力したら『田中』、『田口』とか『田』の候補が出てきて田中を選択して、スペースを入力してまた『鈴』と入力したら『鈴木』や、『鈴鹿』とまた候補出てきて入力出来るように出来ますか?
2017/10/27(金) 22:27:17.28ID:1gHUTTMhd
>>834 黒如意とでも書けばいいのかな
2017/10/27(金) 22:30:52.04ID:+kIdBPsu0
>>837
若干挙動は違うけど
自分がよくやる手法が>>284
Splitあたりで工夫すればスペースで区切ってできるかもね
840デフォルトの名無しさん (ワッチョイ 8903-xjBH)
垢版 |
2017/10/28(土) 00:40:19.22ID:W70mY4tC0
>>838
大久保さんかよwお前BBAだろw
2017/10/28(土) 09:13:49.16ID:VLfN62TLH
肉男爵
842デフォルトの名無しさん (ワッチョイ 1b2d-xXVv)
垢版 |
2017/10/28(土) 09:33:46.66ID:lFHzdqsq0
リモートデスクトップを使用してADサーバへアクセスし
変更するマクロを作成しています。

shellを使用して目的のサーバを起動させることは出来たのですが
そこから開いたサーバを操作するにはどうしたらよいのでしょうか?
何かやろうとしてもローカルPCの方を操作しようとしてしまいサーバの方を操作できません。

曖昧な質問で申し訳ないのですがよろしくお願いします。
843デフォルトの名無しさん (ワッチョイ 13eb-Rdnx)
垢版 |
2017/10/28(土) 10:03:13.85ID:nxEBBv600
>>842
VBAでやる必要がわからない
それこそpowershellとかの方が良いような

それかマウスやキーボードを操作するとか
844デフォルトの名無しさん (ワッチョイ 1b2d-xXVv)
垢版 |
2017/10/28(土) 10:43:35.88ID:lFHzdqsq0
>>843
ご返答ありがとうございます。
powershellについて調べてみました。
これをサーバに作成しておき、
ローカルPCの方のマクロボタンを押して起動させ、
ADの設定変更をするようなマクロを作りたいと考えています。

起動させたサーバ側を操作する方法があればご教授いただけないでしょうか?

よろしくお願いします。
845デフォルトの名無しさん (ワッチョイ 13eb-Rdnx)
垢版 |
2017/10/28(土) 10:55:53.23ID:nxEBBv600
>>844
ADって何?
2017/10/28(土) 10:56:14.17ID:aSsplcDm0
>>837
これまた日本語がわかりにくなあ

とりあえず文字検索するだけなら

dim inpted
dim i as long,maxRow as long,list as new collection
'maxRowは最大行自分で求めて
for i = 1 to maxRow
 if .cells(i,1).value like inputed & "*" then
  list.add .cells(i,j).value
 end if
next i

dim l as varianrt
for each l in list
 combobox.additem l
next l

とかこんな感じでいいんじゃねえの
コンボボックスに入力した値って要素0に入ってるんだっけか?
2017/10/28(土) 10:57:11.27ID:aSsplcDm0
あ、コレクションに代入してるときのcolumnのjは間違い
1ね
わかると思うけど
2017/10/28(土) 11:00:53.80ID:aSsplcDm0
あ、あとinptedが入力済の文字列ね
どっから代入してくりゃいいか質問文からは読み取れないので
849デフォルトの名無しさん (ワッチョイ eb81-YYNr)
垢版 |
2017/10/28(土) 11:43:02.13ID:av9I5Dpn0
コピーのコードどが間違っているんでしょうか?
シート1とシート2にA3がオートフィルの題名でA4からA9にデータがあり
シート1のデータをシート2の最終行に張り付けたいのですがうまくいきません。
下記がコードです。
Sub Q_2_4()
Dim DataLastCell As Range

With Worksheets("Sheet2")
'「Sheet2」ワークシートの表で、A列のデータ入力行のセルを取得し、変数DataLastCellに代入する
Set DataLastCell = .Cells(.Rows.Count, "A").End(xlUp).Offset(1)
End With

'「Sheet1」ワークシートのA4からD9をコピーして「Sheet2」ワークシートに貼り付ける
' Worksheets("Sheet1").Range("A4:D9").Copy(コピーするセルの選択)
'コピーするセルたりないのは貼り付けをするを指定するセル
'
Worksheets("Sheet1").Range("A4:D9").Copy Destination:=DataLastCell
End Sub

下記の部分で止まってしまうのですがどこが間違っているかわかりません。
Worksheets("Sheet1").Range("A4:D9").Copy Destination:=DataLastCell
2017/10/28(土) 12:27:45.96ID:jW60ksrY0
>>844
サーバー側にAPIをつくっておいて
HTTP-POSTでPowerShellを走らせるコマンドを送りつけるとか

そこまでやるなら、もはやVBAにこだわる必要ないし
セキュリティも知らないけど
2017/10/28(土) 12:33:46.75ID:jW60ksrY0
>>849
なんというエラーで止まるのでしょう
構文には問題なさそうなので、コードではなく別の要因では
852デフォルトの名無しさん (ワッチョイ eb81-YYNr)
垢版 |
2017/10/28(土) 12:41:37.08ID:av9I5Dpn0
実行時エラー9
インデックスが有効範囲にありません。
とでます。
で、デバックをおすと該当部分が黄色くなります。
シート名は変更していません。
853デフォルトの名無しさん (ワッチョイ eb81-YYNr)
垢版 |
2017/10/28(土) 12:58:58.98ID:av9I5Dpn0
〉〉851
なぜかダウンロードした真っ皿なサンプルコードに移し替えたらできました。
シート名も変更せず、シート数も変えてないのに何かが変わっていたみたいです。
854デフォルトの名無しさん (ワッチョイ 13eb-Rdnx)
垢版 |
2017/10/28(土) 13:04:08.97ID:nxEBBv600
>>844
windowsならosの機能でリモート保守機能があるはず
それをpowershellから使えばいい
2017/10/28(土) 13:18:20.37ID:NPsbiAS90
>>853
何故かじゃないでしょ。
うごかない環境で
Debug.Print DataLastCell.Address
くらいやっときなよ。
2017/10/28(土) 13:50:45.67ID:nXGe9PnV0
>>846

2文字目打ったら更に絞り込むにはどうしたらいいですか?
listは空にできますか?
2017/10/28(土) 14:12:38.74ID:89ERO7Zx0
>>853
ダウンロードってのがよくわからないけど色んな環境で使い回しているのなら
ExcelのバージョンまたぎでVBAが動かなくなることがある

同じブックを2003→2007→2003とかで使い回すと最後の2003の時だけエラーが出たり
2017/10/28(土) 14:27:37.18ID:U6aWHNpTa
>>856
あ、ごめん、頭にcomboboxクリアするコードいれなきゃダメだわ
それぐらい調べて
2017/10/28(土) 14:28:45.31ID:U6aWHNpTa
二文字目以降も絞るはずだよ
likeステートメントで調べて
2017/10/28(土) 15:09:56.58ID:nXGe9PnV0
>>858
これでいけました。
ありがとうございます。

>>839
参考になりました。ありがとうございます。
スペース区切りで2項目も出るようにしらべてみます。
2017/10/28(土) 15:10:37.21ID:nXGe9PnV0
>>858

https://i.imgur.com/y68fVEC.jpg
2017/10/28(土) 15:22:04.59ID:wz68Wl0yM
>>860
いいってことよ(´・ω・`)b
2017/10/28(土) 15:36:03.59ID:U6aWHNpTa
>>861
おーいいね
お疲れ様
2017/11/02(木) 17:28:07.27ID:ET9hl5Jtd
加減乗除をやりたいんですが、式のセルの下に直で式を書いて、値に数値が出るような仕組みはどんなマクロになりますか?
パラメーターは後に記号にして計算さしたくて、短縮計算風に出来ませんかね?
https://i.imgur.com/dCH8v0R.jpg
2017/11/02(木) 19:09:21.64ID:xfkuRD420
構文解析?短縮計算とは変数のことかな?
計算では括弧や優先順位はいいのかな?
2017/11/02(木) 20:09:43.68ID:0sv8Sbl30
>>864
数値のセルに名前をつけてたとえば
h
w
t
にしといて、式に
=h*w-t
ってやると計算される。2013ね。他のバージョンは知らん。
日本語の名前でもいけると思う。
2017/11/02(木) 21:02:34.02ID:7hQpKtJQ0
横から縦を引くのって、どういう用途なのか気になる
2017/11/02(木) 21:20:16.62ID:q8cyaoAa0
構文解析っていうのか分かりませんがが、四則演算でかけ算、わり算優先です。式は括弧もありです。
最終的には、フォームのテキストボックスとかに式を打って、ボタン押して計算させるものを作る予定です。

https://i.imgur.com/ywonMIZ.jpg
2017/11/02(木) 21:39:49.02ID:ZL7lK7Od0
>>864
式に使いたい項目が動的に増えたり、演算子の順序変えたりしますか?
後、式と結果を出力するセルも画像のままでいいのてすか?
2017/11/02(木) 21:44:12.23ID:q8cyaoAa0
>>869
パラメーターは下に増えます。演算順序は変えません。括弧、かけ算、わり算優先です。
答えはそのセルでいいです。
2017/11/02(木) 22:01:48.46ID:ZL7lK7Od0
>>870
一つのテキストボックスに
(a*b)+3/4
みたいに入力されたものを解釈して計算する感じでしょうか?
2017/11/02(木) 22:05:39.15ID:hrrpsG610
>>864
マクロ4.0のevolute
vbaの可変変数
辺りが合いそう

もっと具体的に何がしたいか書けば良い回答もらえるかも
今のままだと意味がわからん
2017/11/02(木) 22:11:24.38ID:xfkuRD420
(1) 計算記号を半角の +,-,*,/,(,) に置き換える
(2) 式の中のパラメータを全て数値に置き換えた文字列を作る
(3) 出来上がった式の先頭に "=" を付ける
(4) 答えを出したいセルに (3)の式を書く

で出来ないか?
2017/11/02(木) 22:21:25.46ID:ZL7lK7Od0
Dim 式 As string
式 = "(1+2)*3"
Range("D5") = ExecuteExcel4Macro("EVALUATE(" & 式 & ")")

とりあえず、文字列変数の”式”に計算式代入してますが、代入をテキストボックスから代入にすればD5に結果が出ます。
2017/11/02(木) 22:25:43.90ID:hrrpsG610
そもそも置き換える意味がなくないか
https://i.imgur.com/ZAuSaoz.png

=
(
INDEX(B:B,MATCH("w",A:A,0))*
INDEX(B:B,MATCH("h",A:A,0))
)+
INDEX(B:B,MATCH("t",A:A,0))-
INDEX(B:B,MATCH("m",A:A,0))
2017/11/02(木) 22:47:32.54ID:rd1E1A0+0
マクロ使わなくても>>866ので十分じゃないの?
式を文字列としても表示したい場合もワークシート関数で済むし
2017/11/02(木) 23:07:13.28ID:q8cyaoAa0
>>871
そんな感じです。

>>872
ある物の大きさだったり、重さだったり、面積とかを計算で出したくて、物ごとにパラメーター数値をそれぞれ持たせて、Aの大きさを計算したり、Bの大きさを計算するのに使う予定です。
イメージの順序は

@フォーム1のテキストボックス1に種類を入力。
計算ボタン→Bへ。
パラメーターボタン→Aへ

Aフォーム2
種類別にシートに登録されてる基礎パラメータ―値を取得し数値を転記させる。
 基礎値は変更可能で変更したらパラメーター数値を上書きしフォーム1へ戻って計算ボタン。基礎値は種類によってなしもあり。

Bフォーム3に決められた項目があって、面積や重さ等を算出し転記。


イメージはこんな感じで、決められた項目の計算式はマクロに組み込む予定で、自分で算出したい時に式を記号で書いて計算出来たら便利でいろいろと用途が広がっていいなと思ってます。

説明下手ですみません。やりたいことは伝わります?

https://i.imgur.com/jUHfvjj.jpg
2017/11/02(木) 23:08:16.66ID:GyvJT/E0a
ExecuteExcel4MacroじゃないEvaluateでも出来そうじゃない?
2017/11/02(木) 23:22:31.35ID:GyvJT/E0a
ただ、汎用性を広げると結局、Excel関数と何が違うの?という話になってしまう。
自分で算出したい時に式を記号で書くのと式をExcel関数で書くのどっちが良いかという話。
2017/11/02(木) 23:25:12.28ID:hrrpsG610
>>866
が一番楽かな
俺は名前を付けるのが嫌いなので(あとで探しにくい)
>>875みたいに数式を工夫するけど
2017/11/03(金) 00:48:40.50ID:WzVp0mNm0
簡単にいうと

長さ1センチの棒が10個繋がっていて.
それぞれA1〜A10という記号。

@A5までの長さは?
 Ans=A1×5
Ans=A1+A2+A3+A4+A5
Ans=A1+A2+....A6-A1

どれでも同じ答えになるけど、式はバラバラでも答えが出るような物をマクロで書きたい。
2017/11/03(金) 00:56:23.31ID:9+4w5kxK0
>>881
言うのは簡単だけど要件定義をしっかりしないと無限に答えが出るからどうしようもないぞ
Ans=(A1+A2)+A3+A4+A5
Ans=A1+A2+A3+A4+A5*1
なんてのもある
何を省くのかを全部決める必要がある
2017/11/03(金) 06:58:23.53ID:PsEqIyAK0
>>881
A1〜5が 1.0、1.0、0.9、1.1、1.0 みたいなこともあるのかな?
2017/11/03(金) 10:36:10.54ID:WzVp0mNm0
>>883
あります。
885デフォルトの名無しさん (ササクッテロラ Spf1-4J3c)
垢版 |
2017/11/03(金) 14:26:57.95ID:kxIRYzimp
>>881
構文解析とか字句解析とかパーサ、レキサとかを勉強したらいいよ
2017/11/03(金) 17:05:15.87ID:Ro85MhDs0
構文解析とか面倒くさいことせずにそのまま式として使えばいいじゃん
何か不都合があるの?
2017/11/03(金) 17:37:53.64ID:30SW/guPM
(´・ω・`)b
2017/11/03(金) 17:38:24.43ID:30SW/guPM
888げっち(´・ω・`)b
889デフォルトの名無しさん (ササクッテロラ Spf1-4J3c)
垢版 |
2017/11/03(金) 18:05:12.90ID:kxIRYzimp
>>886
横とか縦とかを使いたいって要件があるからじゃね
2017/11/03(金) 18:08:36.69ID:Bwj2SpAUF
>>886
原価計算をマクロで作っててどうしてもやりたいんですよね。
2017/11/03(金) 18:41:59.94ID:Ro85MhDs0
>>889
横とか縦とかはセルに名前付ければいいでしょ?

名前付ける部分にマクロ使うのはわかるけど
四則演算の数式の解釈をExcelに任せずわざわざ自作ことないんじゃないの?
892デフォルトの名無しさん (ササクッテロラ Spf1-4J3c)
垢版 |
2017/11/03(金) 18:49:35.38ID:kxIRYzimp
>>891
セルに名前つけたくないのかもしれない
2017/11/03(金) 22:20:15.66ID:PsEqIyAK0
>>884
情報の後出しにならないように他にも条件があるならすべて書くがいい
2017/11/03(金) 22:42:30.80ID:WzVp0mNm0
>>893
やりたいことは>>877

種類 A

W×H/1000/1000
答え
○○

D0×(T+2)+20+30
答え
○○

みたいに計算がしたくて、種類によって記号に与えられてる数字を反映して計算。使う計算は、+、-、×、/の4つと括弧。
895デフォルトの名無しさん (アウアウカー Sa69-OggG)
垢版 |
2017/11/04(土) 00:12:34.17ID:Om9HmY4ya
ボタンだけシートに置いてフォーミュラ使ったほうがエクセルでやるメリット活かせそうな気がするが
2017/11/04(土) 01:46:11.14ID:HoIymfa20
例えばA列に数式、B列に計算結果、C以降の列に数式に使われる変数の値を1つずつ入れるとする。
A1に"計算式"、B1に"結果"、C1に"変数→"と入力しておく。
A2には"(%1+%2)/%3"、A3に"(%1)^(%2*%1)/%3"などと計算式を入力して以下を実行。

Dim i As Long
Dim j As Long
Dim strFormula As String
Dim lngArgNum As Long

With Thisworkbook.Worksheets("計算")
For i=2 To .UsedRange.Rows.Count
strFormula=.Cells(i,1).Value
lngArgNum=Len(strFormula)-Len(Replace(strFormula,"%",""))
For j=1 To lngArgNum
strFormula=Replace(strFormula,"%" & Cstr(j),.Cells(i,j+2).Value)
Next j
.Cells(i,2).Value=Evaluate(strFormula)
Next i
End With

こんな感じで計算式とデータを元に計算できると思う。
スマホから入力で実際には試していないから間違いは有るかも。
2017/11/04(土) 01:49:39.94ID:6BfKqcJn0
名前付き範囲とFORMULATEXT()使ったスマートだと思うがな
898デフォルトの名無しさん (ワッチョイ 42eb-4J3c)
垢版 |
2017/11/04(土) 02:50:58.68ID:LffwWHr/0
>>896
仕様を満たしていないから0点と言われる可能性もある
899デフォルトの名無しさん (ワッチョイ 42eb-4J3c)
垢版 |
2017/11/04(土) 02:57:57.27ID:LffwWHr/0
>>877 の画像のデータをDBに入れて
sqlで計算させたらいい
つまりAccessを使うのがいいと思う
2017/11/04(土) 04:40:42.42ID:JlmNU5S6a
>>890
どう実装するかはあなたのセンスでは?
2017/11/04(土) 13:33:35.87ID:R24m495Za
>>898
そりゃ、コード作成依頼は受けるつもりが無いんでね。
わざとじゃ無いけど正直、仕様からわざと外したいくらい。
だから最初から仕様はまともに読んでない。
考え方を示しただけ。
後は自分の仕様に合わせて自分で作ってくれってこと。

自分が示したコードは最初から変数を%1とかにしたけど、シート上に変数のリストを持たせれば>>864の仕様により近くなるけど、そういうことも含めて自分で工夫出来て欲しい。
902デフォルトの名無しさん (ワッチョイ 3d03-nsS3)
垢版 |
2017/11/04(土) 13:46:26.63ID:oCKjTVzP0
言い訳するなら最初から答えようとすんなカスw
2017/11/04(土) 14:18:00.40ID:R24m495Za
>>902
お前には関係無かろう。
コードも示せないくせに。
そんなに言うならお前が仕様通りのコードを示せば良いじゃないかw
2017/11/04(土) 14:23:56.33ID:CRrC4P9Kd
種類選択して、行に並ぶ全記号をループ処理でフォーム2のテキストボックスに転記させ計算ボタンをクリックして書いた式を+なりsplitで区切って+なら足し算、-なら引き算って感じでは無理かね?
複数条件が無理そうだけど。()の概念がなければなんとかなるのかね?
2017/11/04(土) 14:36:42.41ID:R24m495Za
>>904
そのやり方だと複雑な計算式や()が付いた式の場合に難しくなると思う。
上でも書かれてる構文解析の話になる。
906デフォルトの名無しさん (ワッチョイ 3d03-nsS3)
垢版 |
2017/11/04(土) 14:38:17.15ID:oCKjTVzP0
>>905
だから知らんのに答えようとしてスレ荒らすな無能
2017/11/04(土) 16:17:57.99ID:sTeHaJ1X0
>>903
頓珍漢なコードでどや顔されても迷惑なだけ
2017/11/04(土) 16:21:46.87ID:mUpZK5PE0
じゃあおまえが頓珍漢じゃないコードを
書いて反論すればいい。
2017/11/04(土) 17:26:08.34ID:lW5YBK4ma
荒らしてるのはどっちなんだろうね。
>>906>>907もコードも考え方も示さずに文句しか書かない。
2017/11/04(土) 18:15:58.49ID:S9+korX2M
荒し?
事実だろ w
そもそも既に
簡単にやりたいなら>>866
ちょっと工夫して>>875
ガッツリやりたいなら>>885
が既にでてる
>>896でどや顔は恥ずかしいだけ
2017/11/04(土) 18:36:47.91ID:rZk8iN3Y0
で、肝心の質問者は全然出てこないいつものパターン w
2017/11/04(土) 21:54:18.84ID:84qcs9U10
荒れてますな
2017/11/04(土) 22:20:15.29ID:WXoZTt/lM
頓珍漢どや顔君が暴れてるだけ
2017/11/04(土) 22:37:51.15ID:84qcs9U10
結果希望のコードは出来ないで終わりだな。

次の方どーぞー
2017/11/04(土) 22:45:14.81ID:SLMICp2Ea
>>910
バーカw
これだからレベルの低い癖に難癖つける奴は困るんだ。

そもそも多少書ける奴なら構文解析が面倒くさいのも分かる筈。
それでも構文解析にメリットが有るなら分かる。
今回、一体どこにメリットが有るんだ?
理由も無しに構文解析でやる奴はいないからコード例すら出てこない。

>>866は現実的な案だ。
だが、使用者にセルに名前を付けることを強いる方法だ。
大したデメリットではないからこの選択肢はありだが、最初に提示されても質問者が乗ってきていない。
幾つかの選択肢が出るのを待ってるのかもしれんが、それだったら別の案を提示しても良いだろう。

お前は全く分かって無いようだが、>>875は質問者の質問をそのまま否定したものだ。
つまりExcel関数を使えというものだ。
俺もこの意見に賛成だ。
それが>>879だ。
だが、質問者の意図をこちらが完全に把握するのは不可能だ。
状況によっては質問者の考えを取る場合もある。
実際、俺もそういう場面があってその時は>>896とは少し違うがEvaluateを使った。

はっきり言って>>896はコードを手直しすればかなり有力な案だ。
マクロでやりたいならな。
>>875も有力だ。
マクロでやらないなら。
多少書ける奴ならそんなことはすぐ分かる。
2017/11/04(土) 22:47:58.48ID:WXoZTt/lM
>>915
>>902

中身のない長文はバカ
の見本だな
2017/11/04(土) 22:49:37.17ID:9byl7HlM0
俺はそれよりも何よりも>>896がスマホでどう入力してるのかが気になって仕方ない
2017/11/04(土) 22:56:05.22ID:SLMICp2Ea
>>916
中身が理解出来ない or 文句言いたいだけの間違いw

>>917
別に、そのまま全部手打ちだよ。
919デフォルトの名無しさん (ワッチョイ 3d03-nsS3)
垢版 |
2017/11/04(土) 23:01:13.23ID:oCKjTVzP0
案の定荒らしとるやん
無能の答えたがりは排除するに限る
2017/11/04(土) 23:01:26.25ID:9byl7HlM0
>>915
構文解析はちゃんとかければ良いんだけど、めんどくさい+例外が多いからなー
その点を完全にクリアできるなら有力候補だね。俺には無理だわ

>>866
はchangeイベントで毎回A列のセルそれぞれに名前を付けるってコードを走らせれば、直感的でわかりやすくなるかもね

>>916
中身があるのが見えないのか、勿体無い
2017/11/04(土) 23:01:39.52ID:sTeHaJ1X0
そろそろ引っ込んだ方がいいんじゃね?
2017/11/04(土) 23:06:22.01ID:/W0Qwec6M
>>920
> 中身があるのが見えないのか、勿体無い
あの程度の中身であの長文 w
マジで言ってるの?
923デフォルトの名無しさん (ワッチョイ 79ea-lboT)
垢版 |
2017/11/04(土) 23:25:14.88ID:jkiPwlri0
求められてるのはテクニック自慢知識自慢の回答じゃなくて多少泥臭くても質問者が理解できるような回答だけどな
業務に使うんだとしたらなんか知らんけど動いたじゃ駄目だからな
2017/11/04(土) 23:56:47.77ID:O0AU1SEY0
なんでもExcelでやりたがる病の次は
なんでもマクロでやりたがる病かな

こういうケースはコードを提示するよりも
選択肢のメリット・デメリットを教えてあげるほうが
質問者のためになると思うけどけどね
2017/11/04(土) 23:59:49.18ID:SLMICp2Ea
文句言ってる奴は何も参考になることが言えんようだな。
というか、前から思ってたが分かりやすいから言ってやる。
ID変えてご苦労さんw

>>923
だからこそ考え方を示すべきで、コード作成依頼は駄目だと思う。
>>896なら動かしてみれば質問者も理解出来るだろう。
そんなに難しい部分も無いし。
926デフォルトの名無しさん (ワッチョイ 42eb-4J3c)
垢版 |
2017/11/05(日) 00:03:30.19ID:d3t3AJCT0
sqlでいいじゃない
2017/11/05(日) 01:22:19.45ID:c6rMDhtU0
何も書かなくなったってことは解決したと思っていいんじゃね
2017/11/05(日) 06:55:18.19ID:3uuR82Hq0
> >>896なら動かしてみれば質問者も理解出来るだろう。
頓珍漢なコードを動かしてもしょうがないだろ、どや顔君 w
929デフォルトの名無しさん (オッペケ Srf1-ApTO)
垢版 |
2017/11/05(日) 12:31:57.15ID:RpLSKu2Sr
無能は混乱させる発言をするよりは何も言わない方が上策だという事が分かってない
だからこそ無能なのだが
2017/11/05(日) 12:49:11.93ID:P7Kt20uM0
「混乱させる発言をするよりは何も言わない方が上策」
これが事実であることを証明してみなさい
2017/11/05(日) 12:59:13.87ID:uz/X8WP/M
一連のレスで充分証明されてるだろ
理解できてないのは「無能」と言うことまで w
2017/11/05(日) 13:01:16.77ID:3CeHdKb50
沈黙は金
2017/11/05(日) 13:01:56.76ID:P7Kt20uM0
○○だから無能である
無能の定義は○○である
定義によると○○だから無能である
これが証明

循環www
2017/11/05(日) 13:05:24.14ID:c6rMDhtU0
無能でも個人の意見として発言すればいいだけやん
935デフォルトの名無しさん (ワッチョイ 79ea-lboT)
垢版 |
2017/11/05(日) 13:08:17.40ID:9GsfV+7k0
まぁ一番悪いのはコード依頼する質問者だけどな
2017/11/05(日) 13:08:22.77ID:P7Kt20uM0
>>933
> 沈黙は金

http://www.weblio.jp/content/%E6%B2%88%E9%BB%99%E3%81%AF%E9%87%91
この「沈黙は金・雄弁は銀」という表現が成立した当初は、金よりも銀の方が価値が高かった、
つまり、、元々は、沈黙よりもむしろ雄弁を称えた格言であったという説がある。
2017/11/05(日) 13:13:47.98ID:c6rMDhtU0
>>935
こういうマクロが欲しい→自分じゃできない→誰かに作ってもらう
って考えの人には教えてもしょうがないからな
2017/11/05(日) 13:37:23.74ID:2uRc+T650
え、まだやってたのw
>>915がうまくまとめてるのに
もうちょい人生有意義に使おう
2017/11/05(日) 14:05:31.85ID:Go05s/xH0
有効な君たちへ。

Aと入力したら、コンボボックスにadditemでAから始まるキーワード候補を入れ込んで矢印ボタンを押さなくても入ってる候補を自動で全て表示って出来ない?
dropdownって書いても最初の1個しか表示出来ないんだが。
リストビュー使わずコンボボックスのみは無理かね?
2017/11/05(日) 14:19:42.28ID:2uRc+T650
>>939
昔作ったな、それ
全部表示されるはず
リストの内容を一度確認したほうがいいかもしれない

でもバージョンによるバグかもしれない
アップしてくれれば確認するよ
2017/11/05(日) 14:44:16.23ID:3uuR82Hq0
本人降臨乙 w
2017/11/05(日) 14:51:43.48ID:Go05s/xH0
>>940

>>861
2017/11/05(日) 15:01:02.75ID:2uRc+T650
>>942
写真は辞めてくれ。見るのめんどくさい

出てきたからあげるわ
大体やりたいことはこれだと思う
・設定シートのB列に表示したいもの。C列は入力する文字を入れる
・入力シートのA1に「う」と入れて決定。リストが現れて「東京」「北海道」が現れるので選択する
もちろん「う」じゃなくても「東」なんかでもいい。場合によってはB列に「渋谷」とかいれてもいいかもしれない
https://dotup.org/uploda/dotup.org1380568.zip.html

自分で言うのも何だがこれ超便利。かなりオススメ
2017/11/05(日) 16:02:07.87ID:Go05s/xH0
>>943
なにこれすごい...
これは便利ですね!ちょっと理解するには時間がいりますね。ありがとうございます!

キーコードF12のところは何をしてるんですかね?
2017/11/05(日) 16:24:01.20ID:0zSGS5Fq0
持論の長文なんて無能アピールでしかないよ
2017/11/05(日) 16:30:01.87ID:0zSGS5Fq0
>>924
こういう意識高い系が一番困る。
相手のため、とか何で上から目線なんだよ。
ExcelVBA質問スレなんだから、ExcelVBAで解決できないなら黙っとけ無能。
2017/11/05(日) 16:42:55.58ID:2uRc+T650
>>944
あ〜F12な。結局使わないから封印してたの忘れてた
リスト選択中に、enterじゃなくF12を押すとB列じゃなくてA列のIDが入力される
都道府県の場合なら、都道府県番号なんかを入れておけば便利かもな
リストの内容によっては全く使わないかもしれない
好みで設定したり拡張したりしてくれ
2017/11/05(日) 16:45:11.41ID:2uRc+T650
>>946
教える方が上ってのは常識だよね。君は教室で暴れるタイプだったのかな?まぁそれだったら言っても分からんかもしれない
必ずしもVBAで解決する必要はない。可能ならエクセルや他のアプリケーションに任せたほうが遥かに早い場合もある
もう少し視野を広く持とう
949デフォルトの名無しさん (ササクッテロラ Spf1-4J3c)
垢版 |
2017/11/05(日) 16:53:57.90ID:a4pI1v9ip
>>948
たかがvbaのしかも一つのことだけで
上の立場になったと錯覚できるのか

こう言うのが職場の役割の上下関係を
人間的な上下関係と取り違えてパワハラとか問題を起こす
2017/11/05(日) 17:00:41.90ID:yl/L3RMU0
2017/11/05(日) 17:07:04.37ID:2uRc+T650
>>949
君は本当に謙虚さが足りないな
教えるという行為は分野が何であれ、それだけで上なんだよ
別にそれが人生論でもvbaでもケツの吹き方でも何でも同じだよ
2017/11/05(日) 17:22:31.31ID:Go05s/xH0
>>947
なるほど。ありがとうございます!
大事に使わさせていただきます!
2017/11/05(日) 17:32:40.60ID:jwXclmwa0
>>949
立場を教えてもらってるおまえは
下なんだからちゃんと理解しろよ
954デフォルトの名無しさん (ワッチョイ 99b3-4J3c)
垢版 |
2017/11/05(日) 17:59:37.33ID:vVdKzVLa0
>>951
たかが一つ教えた気になったら
全部が上だと思うのが間違いだと指摘している
ちゃんと教えてやるから正しく理解しろ
2017/11/05(日) 18:03:31.52ID:2uRc+T650
>>954
人の言ってることを勝手に拡大解釈するようなアホに教わることはないんだ、スマン
956デフォルトの名無しさん (ワッチョイ 99b3-4J3c)
垢版 |
2017/11/05(日) 18:35:21.91ID:KrEf+qNQ0
>>955
このスレに質問した人も
あなたに教えてほしいとは言ってないだろ
2017/11/05(日) 18:46:16.14ID:0zSGS5Fq0
無能の屁理屈はスルーで
2017/11/05(日) 19:05:22.65ID:2uRc+T650
>>956
意味がわからない
質問者が回答者を選ぶシステムは無い

まぁ仮にあったとして、俺は>>1>>73>>110>>167>>875>>943
(167-875の間は調べるのがめんどくさくなった)
だけど、そこまで悪い回答者ではない。指名も多数あるだろう。ははは
回答もロクにせずに教室で大暴れしてる誰かとは違う
2017/11/05(日) 19:06:04.69ID:2uRc+T650
回答が出来ないならせめてスレ立てぐらい頑張れ
1000里の道も一歩からだ
2017/11/05(日) 19:08:37.19ID:CWWh4Dmp0
どうみても質問者より回答者の方が多いし回答者同士で質問を奪い合ってる状態
もう自称上級者が「教えさせてください」と頭下げていいレベル

てかお前らの態度次第じゃ質問してやってもいいんだけどどうする?ちゃんと答えられんのか?
2017/11/05(日) 19:12:27.65ID:2uRc+T650
>>960
はい、是非質問して下さい
練磨のため、社会のためにも問題解決に励みたい所存です
2017/11/05(日) 19:17:19.82ID:0zSGS5Fq0
>>961
間違えた。
意識高い系なんじゃなくて、ただのバカだった。すまん。
2017/11/05(日) 19:19:47.12ID:CWWh4Dmp0
>>961
VBAで次スレを一発で立てることは可能ですか?
2017/11/05(日) 19:23:35.37ID:2uRc+T650
>>963
「一発」が何の一発か分からんが、立てることは可能
ただ5chになってからの仕様は知らないのでvbaでの回答はできない

vbaでそんなシステムを作るよりも、専ブラ使ったほうが早いと思う
965デフォルトの名無しさん (ワッチョイ 99b3-4J3c)
垢版 |
2017/11/05(日) 19:29:07.50ID:DIMJ1VBx0
>>958
回答者を選ぶシステムがないから
勝手に教えたのは自分だよな

勝手に教えておいて立場が上とか傲慢だよなってことだアホ
2017/11/05(日) 19:32:08.01ID:2uRc+T650
>>965
だからそう言ってるじゃないか
俺は傲慢で不遜だしそういう態度を取りたいから回答を続けているんだよ
で、回答をもらえた方も問題解決できてハッピー
誰も損してないね

君がここ何か文句を言いたいなら、俺以上に早く正確に回答することだけど、出来るのかな?
967デフォルトの名無しさん (スップ Sd62-3K0w)
垢版 |
2017/11/05(日) 21:29:59.86ID:bjKo+Lyid
>>966
VBAでQiitaに記事を投稿することは可能ですか?
内容は VBAでQiitaに投稿する方法についてです。
2017/11/05(日) 21:41:12.55ID:2uRc+T650
>>967
Quiitaの仕様についてはよく知らないしわざわざ自動化することでもないだろう
内容を考えれば自動化するよりも手動で投稿したほうが確実で早い
969デフォルトの名無しさん (ワッチョイ 3d03-nsS3)
垢版 |
2017/11/05(日) 21:53:05.13ID:eSigvT1a0
>>966
まだ荒してんのかお前w
いいかげんにしろ無能
2017/11/05(日) 22:22:27.36ID:QPFjkg1+0
何も貢献出来てない者が上から目線とか何の冗談だ。
質問も回答もしないバカ者は完全に荒らしだろ。

どんなに負けたく無いのか知らんが、人のせいにするんじゃなくて技術を持ってない頭の悪さを呪うんだな。
971デフォルトの名無しさん (ワッチョイ 42eb-4J3c)
垢版 |
2017/11/05(日) 22:27:54.74ID:d3t3AJCT0
>>966
またアホな事を
教える側が上とか言ってる事を指してるんだよ
お前は馬鹿すぎて議論にすらならない
2017/11/05(日) 22:33:57.47ID:2uRc+T650
そろそろ次スレ頼む
俺は無理だった

ERROR: このホストはBBx規制中です。-
2017/11/05(日) 22:40:31.46ID:V3jZCxq50
>>972
あなたの豊富な知識をここで提供してみませんか!

https://qiita.com/advent-calendar/2017/vb
2017/11/05(日) 22:44:26.84ID:3e8zsqcY0
プルダウンリストにて
以下のような表があったとして、

田中 人事 42歳
山本 経理 23歳
佐藤 人事 46歳




以下のようなプルダウンボックス×2を配置します
口 口
左のボックスで部署を選んだら右のボックスに該当部署の人のリストが出て、その右に年齢を出したいです。
普通に検索しても、同じキーが連続してる例しかなく、このようにデータベースタイプでキーが飛び飛びになってる表からキーで検索してプルダウンボックスに反映させるやり方が分かりません、どうやればいいですかる
2017/11/05(日) 23:27:18.16ID:CRWVG0Jc0
With文で指定したObjectをWith文内で表記する方法はありますか?
ObjectがRangeの場合、 .Offset(0,0) でお茶を濁しておりますが、、
With文内で添字を取るようなObjectのプロパティにアクセスするケース
で躓きました。
PowerShellの $_.nameみたいなものが使えたら嬉しいのですが、、
2017/11/05(日) 23:47:42.44ID:O1SLruSA0
>>974
ワークシートから検索してコンボボックスに追加していくということなら
表をごっそりRangeオブジェクトでとってきて
ForEachで検索列を手当たり次第見ていって
検索値にヒットしたらコンボボックスにAdd
でご要望通りになるかと
2017/11/05(日) 23:49:55.08ID:V3jZCxq50
>>975
.Item( ) じゃなくて?
2017/11/05(日) 23:55:54.55ID:qDv0JuZq0
あれだな ガキの頃からキーボードカチャカチャやってる世代じゃ無くなって来てるからな
Excelとか、むしろ面倒なんだろな そおゆう世代向けのUIというか操作に変えてかなきゃ
業務も滞ること夥しく成ってくんだろな
Excelの売り方もおかしくなってくし そろそろ潮時かもな

もちろん裏方さんにとってはキーボード必須だろうけど、使う側、数値入れる側にとっちゃあ
タッチじゃないとダメ って時代に突入してんだろな いやはや
2017/11/06(月) 00:12:10.27ID:5pWAtZ9g0
>>977
すげー! まさに捜していた答えでした。
感謝
2017/11/06(月) 22:53:26.80ID:OpNgvhxu0
みんな早く登録するんだ
https://qiita.com/advent-calendar/2017/vb

俺はもう投稿したぞ
去年
2017/11/06(月) 23:22:43.53ID:QEizFbjJ0
>>974
俺の環境が悪いのか、以下のようなプルダウンが四角にしか見えない
>左のボックスで部署を選んだら右のボックスに該当部署の人のリストが出て、その右に年齢を出したいです。
3つ要素があるように思えるけど、実際はどういう風に実装したいの?ペイントか何かでいいのでイメージ画像を作って欲しい
2017/11/07(火) 04:32:19.79ID:jJ/vojE+a
>>974
余談だが現在の年齢を表にすると
来年になっても年取らないぞ
983デフォルトの名無しさん (ガックシ 0626-SaAB)
垢版 |
2017/11/07(火) 09:39:24.82ID:Hcp28Y5z6
bomなしのutf-8 csv に出力するコードでbom飛ばすときのposition = 3がパラメータが間違っていますとか言われるんやけどなんでか教えてください!
984デフォルトの名無しさん (スッップ Sd62-3K0w)
垢版 |
2017/11/07(火) 10:04:40.57ID:bPltWwMcd
>>983
出力するとき、最初からposition=3ってするの?
985デフォルトの名無しさん (ガックシ 0626-SaAB)
垢版 |
2017/11/07(火) 10:07:49.90ID:Hcp28Y5z6
>>984
.Position = 0
.Type = adTypeBinary
.Position = 3
ってします
2017/11/07(火) 11:14:50.45ID:yuq33prU0
Adodb.Streamの話だろ。
ちゃんとキーワード入れろや。
987デフォルトの名無しさん (スッップ Sd62-3K0w)
垢版 |
2017/11/07(火) 11:45:09.30ID:bPltWwMcd
>>985
まだ書き込んでなくね?
2017/11/07(火) 12:02:33.38ID:R8Pyf/inM
>>983
ADOで悩んだ記憶あるけど
オブジェクトをコピーするので逃げた記憶がある
2017/11/07(火) 12:04:47.76ID:R8Pyf/inM

空っぽオブジェクトつくって
データだけコピーね(勿論三バイト捨てて)
2017/11/07(火) 12:10:48.56ID:HIMFSvpjM
excel vbaでword文書を印刷したいんだけど
「セクション1の余白が印刷可能なページ範囲の外〜」
っていうアラートが出てしまう

disalertでも出ちゃうんだけど良い方法ないかな?
2017/11/07(火) 17:59:00.13ID:BYmnpPo+0
余白を変更してみたらどうかな?
2017/11/07(火) 18:04:03.30ID:XAakWZtoM
>>991
レスありがとう

印刷したいファイルは数十個あるから
手作業での余白調節は難しいんだ

それともそれを自動化すればってこと?
2017/11/07(火) 21:57:50.56ID:uQ1ioh0V0
csvファイルをエクセルで開いて、xlsxで保管した場合、このファイルを開いてシート操作やセル操作するのは、通常のエクセルファイルとして可能ですか?
994デフォルトの名無しさん (ワッチョイ 4960-hhgm)
垢版 |
2017/11/07(火) 22:04:04.44ID:XsevGCV00
>>993
可能です
995デフォルトの名無しさん (ワッチョイ 82a4-Y3po)
垢版 |
2017/11/07(火) 22:20:04.16ID:p6FYpT8v0
>>993
シート操作やセル操作をアドインにすればxlsxでも可能です。

つうか、なんでデータベースの出力形式やデータ交換フォーマットってCSVが主なんだろう?
どんなポンコツDBでもXLS出力ぐらいは付いていると思うんだが「データよろしく」
と言うと「じゃあCSVで」と大抵は返される。CSVの意味わかってのかよぉーと叫びたくなるぜ。だって、数字を1000の位でカンマ区切り
とかヨユーでしてやがるからw

「カンマ・セパレーテッド・バリュー」って意味わかんねえのかよこのハゲーっと心の中で絶叫してます。
2017/11/07(火) 22:31:27.81ID:uQ1ioh0V0
>>994 >>995 そうですか・・・。今日は開いたファイルのシートを全然認識してくれなくて、非常に困ってます。
BOOKは開いて閉じる操作ができてるので、大丈夫ですが、中のSheet1を全く選んでくれません。
2017/11/07(火) 22:34:55.14ID:M9SKAXiA0
で、それのどこがVBAに関係するの?
2017/11/07(火) 22:37:41.98ID:yuq33prU0
>>995
xls出力が良いとは限らんでしょ。
それに自分はCSVでもセパレータに普通じゃない文字使ってCSV出力機能自体作ったりしてたが。
&H05の文字とか。
2017/11/07(火) 22:40:04.04ID:yuq33prU0
>>996
認識ということの意味が分からん。
それにVBAでSheetを選択する処理なんて殆どしないと思うが。

具体的に何がしたいの?
2017/11/07(火) 22:49:27.70ID:uQ1ioh0V0
>>999 ただ単に VBAで別のブックへコピーしようとして、このファイルのRANGEの範囲を全然選んでくれなくて、
突きつめて行ったら、Sheet1を認識してくれなかったということに気づいて・・・。
10011001
垢版 |
Over 1000Thread
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 72日 10時間 9分 10秒
10021002
垢版 |
Over 1000Thread
5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。


───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────

会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。

▼ プレミアム会員登録はこちら ▼
https://premium.5ch.net/

▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php
レス数が1000を超えています。これ以上書き込みはできません。
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況