X



Excel VBA 質問スレ Part50 [無断転載禁止]©2ch.net
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん 転載ダメ©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
0002デフォルトの名無しさん (ワッチョイ a511-P7rv)垢版2017/08/27(日) 13:54:51.09ID:jYGHj9310
いちおつしないとおちちゃうよ
0004デフォルトの名無しさん (アウアウウー Sa91-xxBf)垢版2017/08/27(日) 16:42:30.51ID:TgR8VSWoa
初心者です。お時間がありましたら、アドバイス願います。
「自分のペースでゆったり学ぶ EXCEL VBA」という本を使って
勉強しています。シートを任意の場所にコピーするという項目で、
エラーが出てしまいます。

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

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

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

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

で、2010だけどエラーが出なかった。式はおかしくないはず
Worksheets(3) は、3つめのシートを表す。シートが3つ以下だとエラーが立つが、その場合は「インデックス~」のエラーになる
もし可能ならブックごとアップロードしてほしい
0008デフォルトの名無しさん (アウアウウー 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
0013デフォルトの名無しさん (ワッチョイ 4a06-oKtA)垢版2017/08/27(日) 22:32:38.03ID:WmqrsSrM0
>>8
まず最初にエクスプローラーのツール→フォルダーオプションの
表示タブで”登録されている拡張子は表示しない”のチェック外せ。
んで、拡張子xlsxとxlsmの違いについてVBAのその入門書の最初から読んで
勉強し直せ
0014デフォルトの名無しさん (ワッチョイ 392c-0bAf)垢版2017/08/27(日) 23:11:29.74ID:y/dGwO3j0
vbaってpcのスペック関係あるん?
オフィス2010の32ビットでメモリー4gで全てのシートの枠線を一括して色変えろってのをやってるけど
すぐ動作しなくなるんだよね、俺のマクロが可笑しく書いてるだけかな
0018デフォルトの名無しさん (ワッチョイ 293d-oKtA)垢版2017/08/28(月) 00:21:31.22ID:uF0tQjXI0
どのくらいの大きさのものか、どのくらいの処理から重いと言うのかにもよるけど、
>>14と変わらない環境で5000行50列を縦横別々の判定で罫線引いてセルの背景色を行毎に変えて重要項目に個別に色付けてって処理でも五秒もあれば完了するし、
実務に影響が出るほど遅いって事なら、たぶんUnionでセルをまとめずに一つ一つに処理が発生するような事してるのでは?

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

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

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

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

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


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

人数を上から足していって、初めて10を超えた行より上の行の背景色を変える、ということは、
「条件付き書式」で可能でしょうか?
0023デフォルトの名無しさん (ワッチョイ 333d-b8Mh)垢版2017/09/01(金) 18:36:17.67ID:phDteRqs0
>>22
ここVBAスレだからエクセルのスレで聞いた方がいいのでは。

VBAやってる人間って基本的にエクセルの機能知らなくて、
自分で実装した後にそういう機能がある事知って悶絶するのが普通だし。
0024デフォルトの名無しさん (ワッチョイ ff11-BPzU)垢版2017/09/01(金) 18:46:07.83ID:A4rxsWGh0
>>22
人数の累積が10以上かどうかを示す列を追加したら
こんな感じで出来るんでない?

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

D列が累積10以上かどうかの列
0なら10未満、1なら10以上
上の例は5行目に設定した条件付き書式
0026デフォルトの名無しさん (ワッチョイ 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をインポートしなければいけないのでしょうか?
0028デフォルトの名無しさん (ワッチョイ 43aa-k/3h)垢版2017/09/02(土) 11:56:02.84ID:m6EVfTkB0
ありがとうございます。
003022 (ワッチョイ cfd3-X0kF)垢版2017/09/02(土) 18:32:32.23ID:JEC7rQdw0
皆様ありがとうございます。
累積人数の作業列を用意するやり方でできました。
003128 (アウアウカー Sa07-darD)垢版2017/09/02(土) 21:49:19.26ID:BeXWDCQaa
>>29
何で列を追加する必要がある?
一番上のセルを絶対座標にして下のセルの行番号を相対にすれば各行迄の累積人数取れるじゃん。
0035デフォルトの名無しさん (ワッチョイ 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
0036デフォルトの名無しさん (ワッチョイ ff11-BPzU)垢版2017/09/06(水) 01:53:39.78ID:x6m+UIsj0
>>35
SaveAsやSaveCopyAsで動かないってことなのかな?
PowerPoint/Excelのバージョンやうまく行かなかった方法とエラー内容書かないとわからないね
正攻法でダメなら新しいExcelブックを作ってコンテンツコピーして保存するとか
0037デフォルトの名無しさん (ワッチョイ 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列にフリガナが入力されています。
003828 (アウアウカー Sa07-darD)垢版2017/09/06(水) 14:58:34.88ID:8y9+dC+fa
>>35
取りあえず出来たけど今PC閉じたんで書き込めない。
PC開ける環境までもう少し待ってくれ。

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

と書けばミスに気付くんじゃないかな。
004028 (アウアウカー Sa07-darD)垢版2017/09/06(水) 18:33:42.98ID:8y9+dC+fa
>>35
PC開ける場所が無いから駅のホームで開けたったわ。

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

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

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

'hogeの後、連番のファイル名で保存
oShp.OLEFormat.Object.Windows(1).Visible = True
oShp.OLEFormat.Object.SaveAs "C:\Users\hoge\Desktop\hoge" & CStr(i) & ".xlsx"
oShp.OLEFormat.Object.Windows(1).Close
i = i + 1
004137 (ワッチョイ dbe3-otRg)垢版2017/09/07(木) 09:48:18.13ID:YyZpQ4AD0
38できました。ありがとうございます。
サンプルコードコピペで何となく打ってたので変数が違ってました。
それ以外の変数は課題の変数名なので、なぜといわれても。
VBAもなかなか難しい
0042デフォルトの名無しさん (ササクッテロラ Sp3b-r1nS)垢版2017/09/07(木) 16:44:12.32ID:wb4fzXuzp
どなたかご存知でしたらご教示ください
ADODBのレコードセットから特定のフィールドを削除するにはどうしたら良いのでしょうか

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

rs.Close

rs.Fields.Delete(n)

rs.Open

レコードセットが開いていると Delete メソッドがエラーになるので、いったん Close してから Delete するのですが、再度 Open したときに削除したはずのフィールドが復活してしまいます
0043デフォルトの名無しさん (ササクッテロ Sp3b-xWDE)垢版2017/09/07(木) 20:34:42.24ID:ddaTRsKCp
起動済みのインターネットエクスプローラを操作する上手い方法ありますか?
0049デフォルトの名無しさん (ササクッテロラ Sp3b-r1nS)垢版2017/09/07(木) 23:53:31.42ID:wb4fzXuzp
>>45
Save メソッドですか?

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

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

>>46
>>42のSQLはあくまでサンプルですが、SQL文そのものはインプットなので、編集はできない状態だと考えていただきたいです
その上で結果のレコードセットを編集して出力することを考えています
0053デフォルトの名無しさん (ササクッテロレ Sp3b-r1nS)垢版2017/09/08(金) 11:23:59.37ID:E+LN5uAqp
>>52
レコードセットから列を削除したいのです
やりたいことはこんな感じです

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

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

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


このとき、Fields.Delete メソッドはレコードセットが開いているとエラーになってしまいます
なので、>>42のように前後にClose、Openで挟んだのですが、Open実行時に削除したはずの列が復活してしまいます
005528 (アウアウカー Sa43-G+Vk)垢版2017/09/08(金) 12:57:54.99ID:pmDC3Jkna
>>54
>>49でSQLは編集出来ないということらしい。

なんか、物凄く特殊なことしてるね。
レコード数から2次元配列作って1件ずつ入れてくといった泥臭い方法ぐらいしか無いんかね。
0061デフォルトの名無しさん (ドコグロ MMba-Qch9)垢版2017/09/08(金) 21:20:35.90ID:hXO+Cn8GM
>>55
> SQLは編集出来ないということらしい。
ああ、なるほど見落としてたわ
なら俺も泥臭い方法かSQLをパースして特定の列を抜いたSQLを組み立てるとかのトリッキーな方法しか思い付かんわ
006242 (ササクッテロレ Sp3b-r1nS)垢版2017/09/08(金) 23:59:54.71ID:E+LN5uAqp
みなさんレスありがとうございます

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

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

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

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

>>61
SQLは select * になるかもしれないし、予想がつきません
0065デフォルトの名無しさん (ワッチョイ 0b11-r1nS)垢版2017/09/09(土) 02:28:27.21ID:oVzpXcHU0
>>64
正規表現を使うといいかもです

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

Dim strOrg as Sting
Dim strNew as Sting

strOrg = ※文章を代入

With CreateObject("VBScript.RegExp")
.Pattern = "http:////.*$";
.IgnoreCase = True
.Global = True
strNew = .Relpace(strOrg, "")
End With
0066デフォルトの名無しさん (ワッチョイ 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
0068デフォルトの名無しさん (ワッチョイ b7e4-NEns)垢版2017/09/09(土) 10:42:29.03ID:0n3DLxd60
マクロにパスワードかけてたのだが、どうも破られてるらしき兆候があって
ぐぐった結果見つけたこのページの「マクロのパスワードを解除するマクロ」
を試したらほんまに解除できてびっくり
http://neos21.hatenablog.com/entry/2016/09/30/081709

これで破られない対策って誰かご存じないですかね?
自分で根ほり葉ほり動作調べてたら一日かかりそう
0072デフォルトの名無しさん (ワッチョイ dbaa-nhGI)垢版2017/09/09(土) 13:21:02.45ID:ioyoiZXd0
>>71
ありがとうございます。出来ました。
0074デフォルトの名無しさん (ワッチョイ b7e4-NEns)垢版2017/09/09(土) 13:49:29.47ID:0n3DLxd60
「ない」ってあんたそんなズバリと(^ ^;

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

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

簡単に破れる方法であっても、意図的な操作がなければ破られることはないんで、目的は達成できている
0082デフォルトの名無しさん (ワッチョイ 173d-QyhX)垢版2017/09/09(土) 17:28:22.68ID:uXhmIN/20
MSの公式見解だとパスワードはワークグループを分けて誤操作を防ぐ為のものであって、セキュリティ性は無いとされているね。

一応、VBAはバイナリファイルを読み書き出来るから、自分で暗号化技術調べてAES的な暗号化ファイルとか生成出来るぞ。
でも苦労して実装しても運用する奴らが素人だと暗号化した意味が無くなるから作り損だぞ。
0084デフォルトの名無しさん (ワッチョイ 5ab3-R8ON)垢版2017/09/10(日) 05:17:37.27ID:MQQa++S20
>>83
しかし、LibreOfficeのCalcからならあっさり見えてしまうんだな。
見えるからコピペし放題
0094デフォルトの名無しさん (ワッチョイ b66d-AjbO)垢版2017/09/10(日) 09:51:20.19ID:emM90UQN0
>>91
vbaには無い。
こういうのは一般事務の女の子向けに男がヘラヘラ書いたもの、ってかvbaが安易に書き換えられる仕様は常識

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

入力ミスをなくすためにワークシートにロックかけて入力から印刷までフォームなしのVBAで組んである
モッサリでめっちゃ使いにくいシステムで見積書とか作らされてる
下っ端の俺にはどうしようもない
0101デフォルトの名無しさん (アウアウカー Sa43-G+Vk)垢版2017/09/10(日) 12:47:48.18ID:4u5v5mfoa
後は、客はパスワード解除しないだろう、出来ないだろうという前提でパスワード掛けてたことも有ったな。
客の別の部署の奴がプログラムの仕組みが見れては困るという要望に対して。

そういう案件の場合はExcelでやらずにちゃんとシステム組むべきという俺の指摘は営業的事情により却下されたな。
客がそんなに金使いたく無いんだとよ。
0103デフォルトの名無しさん (ワッチョイ 0b11-p4X9)垢版2017/09/10(日) 13:27:08.19ID:y19mgzO60
Range("J5:J12").Value = "AVERAGE (RC[-7]:RC[-2])"

これどういう意味ですか?
0104デフォルトの名無しさん (ワッチョイ 0b11-p4X9)垢版2017/09/10(日) 13:28:56.73ID:y19mgzO60
>>103
これの右辺が分からないです
0105デフォルトの名無しさん (ワッチョイ 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
元の値は半角カタカナで別の名前が各セルの記入されています。
矢印の個所が参考書を元に記述しました。
0110デフォルトの名無しさん (ワッチョイ b66d-Jt/Q)垢版2017/09/10(日) 15:06:41.55ID:emM90UQN0
>>105
何が分からんのか具体的に

後多分コードが間違っている
Sub a()
For Each target In Range("C2:C6")
'セルの値をすべて全角に置換して変数tempに代入する。変換する文字列は、Valueプロパティを使って取得する
temp = StrConv(target.Value, vbUpperCase)
'置換後の値の全角スペースを半角スペースに変換し、元のセルに入力する
target.Value = temp
Next
End Sub
0114デフォルトの名無しさん (ワッチョイ 5ab3-R8ON)垢版2017/09/10(日) 17:52:32.57ID:MQQa++S20
>>107
ああ、それ俺も買ったけど良かったよ。VBEを開こうとすると途端にエラーが出るので
大抵は諦めるね。俺はそれに加えてvbeのフォントを白にして嫁ないようにした。
0115デフォルトの名無しさん (ワッチョイ 0b11-r1nS)垢版2017/09/10(日) 22:09:00.85ID:R8jGf7t60
>>105
何がわからないのか全然わからない
そのソースコードを実行するとどうなるのか、期待値は何なのか書かないと

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

Dim temp() As String
Dim i As Integer

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

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

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

Next

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

どうでもいいけど、全角はvbWideじゃないのかね
全角スペースを半角にするのはReplaceあたり使えば良いんじゃね
課題ならその課題出した奴に聞けよと思うが
0119デフォルトの名無しさん (スププ Sdba-m+++)垢版2017/09/11(月) 08:13:17.53ID:ngQru/Z5d
>>105
矢印の業務が空行の状態が問題文、矢印の行は君が書いた、と解釈した。

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

そういう問題じゃないようだが、高速化するなら、
Rangeを配列に代入
配列内で計算
配列をrangeに書き戻し
する。
0124デフォルトの名無しさん (ワッチョイ 23ea-hBAF)垢版2017/09/12(火) 23:06:27.96ID:cxYAECV80
3万行前後ある列のデータの隣セルに、別シート5000行前後の列から、if条件に該当したものをループで貼り付ける処理をしているけど処理が遅い
3万行の列が外側ループi、5000行の列が内側ループjで回してる
処理時間短縮の為に、最初にiとjのデータを配列で取得して比較を行い
該当するものをセルに出力するように変更した結果、配列使用前より処理時間が短くなった
もっと処理時間を早くするにはどうすればいいかお知恵をください
0129デフォルトの名無しさん (ワッチョイ 23ea-xkdj)垢版2017/09/13(水) 00:31:34.36ID:TkE7wJHp0
>>125-126
ありがとうございます!
なるほど、コレクションかディクショナリーで連想配列を使用すれば早いってことか
イマイチ使い方が分からず使用していなかった
大量にデータを処理する場合は活用すれば、処理が早くなる可能性があるって事なんですね
今後は意識して使わせていただきます

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

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

>>128
ありがとうございます!
これは普通のキーワードでネットで調べてもヒットした記憶がないワードです
今後に活用させていただきます
0131デフォルトの名無しさん (ワッチョイ 173d-QyhX)垢版2017/09/13(水) 00:58:34.20ID:SpyxPvDF0
>>129
配列とセルは相互に直接的なやりとりが出来るんで調べてみて。
いちいちループ回さなくていいから。

簡単に言えば

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

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

Range(範囲) = A

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

しかもダウンロードしようとしたら送ってきたパスワード
そっくりコピペなのにエラー出るじゃねえか
大丈夫かここ
0139デフォルトの名無しさん (ワッチョイ 173d-QyhX)垢版2017/09/13(水) 12:27:02.45ID:SpyxPvDF0
標準のワークシート関数ってVBAで作ってある上に、色々な目的に使えるように冗長性があるから、
目的に対して最も効率的な処理方法であるという条件下だと処理時間は必ず

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

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

ただしワークシート関数とほぼ同じ機能をVBAマクロで実装するのが時間の無駄って事もあるので、
マクロ内でワークシート関数を利用するという状況を考えるのは難しくない。
0141デフォルトの名無しさん (オッペケ Sr3b-Sbom)垢版2017/09/13(水) 12:45:19.24ID:W3E85BX/r
お前らが書いた腐ったvbaコードよりワークシート関数が遅いとかw
どんだけ頭がお花畑なんだよw
0143デフォルトの名無しさん (ワッチョイ 173d-QyhX)垢版2017/09/13(水) 13:55:24.11ID:SpyxPvDF0
https://msdn.microsoft.com/ja-jp/library/office/bb687899.aspx

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

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

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

十分に最適化されたVBAマクロよりもワークシート関数の方が処理が早くなるって状況の具体例があれば参考になるんだけど、
そもそも目的が違うのもあってワークシート関数が重いからユーザー定義関数を作りましょうみたいなページしか見当たらない。
0145デフォルトの名無しさん (ササクッテロレ Sp3b-kWVg)垢版2017/09/13(水) 14:20:51.63ID:W36Ef0cBp
例えばこんな感じ?

Dim Temp (30000,1)

For i=0 To 30000

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

Next

Sheet1.Range("B1:B30000)=Temp


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

ちなみにExcel2002(職場のクソマシン)だから、また今は違うのかもしれないけど。
0147デフォルトの名無しさん (ワッチョイ 173d-QyhX)垢版2017/09/13(水) 14:53:37.84ID:SpyxPvDF0
>>145
うーん、

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

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

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

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

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

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

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

この二つだとtest2の方が早い。といっても数字を周期的に並べただけだし、test1の方はヒットしない数字があるとエラー吐く。
もっとフェアなデータでやれば話は違ってくるかもしれないけど、この例だとワークシート関数の方が遅いね。
0148デフォルトの名無しさん (ワッチョイ 5a11-oWo5)垢版2017/09/13(水) 15:46:41.67ID:n1InxPaY0
おまえら>>128にパフォーマンステストの結果が載ってるのになぜ見ない

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

VLOOKUPで最後のオプションをFALSEにするとリニアサーチだから遅い
TRUEにするとバイナリサーチだから速い O(N)とO(log N)の違い
ただ見つからない場合に不都合が出るからそれを解決するためのDOUBLE TRUE VLOOKUP
同じリニアサーチでもVLOOKUPが単純な二重ループより数倍速いのはC/C++使って最適化してるから
0149デフォルトの名無しさん (ササクッテロレ Sp3b-kWVg)垢版2017/09/13(水) 15:47:56.64ID:W36Ef0cBp
>>147
なるほどー
これは速い
勉強になった

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

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

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

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

みなさんが言われてるように、VBAでワークシート関数を使用した場合の処理時間は、
おなじみオフィス田中さんのページに、配列をセル範囲に出力するのと同じぐらいの処理時間が高速だと書いてありますね
3万行と比較する列データが、複数シートで複数列だったので、次回同じような処理を作成する時は
VLOOKUP用の一時シートを追加して、3万行の列を一番左の列の検索キーにして、比較列はVLOOKUPで取得する実装をしてみます
0154デフォルトの名無しさん (スププ Sdb3-YAaM)垢版2017/09/14(木) 08:15:22.18ID:l8z8iklHd
>>153
分単位はかかり過ぎだと思うなぁ。
データや環境の違いがあるから、純粋に比較はできんだろうが、124の内容を素直に読んでコード書いて動かして見たが、100msecかからんかったよ。
ちな、
3万行のデータを配列1に丸ごと代入
5千行のデータを配列2に丸ごと代入
配列2から辞書を作成
配列1を先頭から順に見て、辞書に存在しない値を消す
3万行データの隣に配列1を丸ごと貼る
0162デフォルトの名無しさん (ワッチョイ db23-p+ov)垢版2017/09/14(木) 14:27:44.29ID:gZf88W9A0
あるシートに所属するプロシージャから
自分の所属するシートを参照するにはどうしたらいいのでしょうか?
プロシージャを他のシートにコピペしたら
コードを書き換えなくてもコピペ先のシートを参照するようなコードを
書きたいのですが
0164デフォルトの名無しさん (ワッチョイ db23-p+ov)垢版2017/09/14(木) 14:54:53.92ID:gZf88W9A0
>>163
いや、むしろシートを飛び越えないでほしいんですが
シートで完結した処理にしたいのでシート名や番号による
シートの指定を排除して、所属するシートのセルを参照したいのですが
検索して調べるとセルを参照する方法としては
シート名を決め打ちする方法ばかりが出てくるので困っているのです
0171デフォルトの名無しさん (ワッチョイ 993d-XDX8)垢版2017/09/14(木) 15:58:45.31ID:EP6SpHBt0
>>164
シートモジュールに直書きする場合はSheetsの部分を省略してCellsやRangeから書ける。

シートを指定しない場合の振る舞いが、
標準モジュールではActiveSheet(見えているシート)だったものが、
シートモジュールではそのシートに限定されるという変化をするので併用する場合は注意が必要。
0179デフォルトの名無しさん (ワッチョイ 993d-XDX8)垢版2017/09/14(木) 20:04:51.07ID:EP6SpHBt0
シート作ったりセルに書き込んだりというエクセル側の操作をすると、
その度にイベントが走ることになるから、これを如何に抑えるかってのが重要なんだけど、
最初から全部覚えようとするとパンクする。
0181デフォルトの名無しさん (オイコラミネオ MM6b-mPfK)垢版2017/09/14(木) 22:08:17.65ID:/NzRhjzgM
For i = Lbound(X) to Ubound(X)

a = MATCH関数でXを検証

if XとMATCH関数が一致 Then

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

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

k = k + 1

next j

end if

Debug.print i

Next i

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

これでDebug.printの表示感覚が1秒ごとくらいなんだけど遅いですか?
30000 * 50 = 150000ループ
実に8時間ほどで納得行かない遅さなんです
0190デフォルトの名無しさん (ワッチョイ 5b6d-A1Wv)垢版2017/09/14(木) 23:20:59.58ID:IwoZ7QGd0
>>189
上司に聞いてみたら?恒久的に超早くなりそうなんで何時間か遊ばせてもらえませんかって
家でも研究中といえば良い
俺が上司なら、ルーチンワークは最優先で効率化させるけどな
0192デフォルトの名無しさん (ワッチョイ 993d-XDX8)垢版2017/09/14(木) 23:37:20.66ID:EP6SpHBt0
仕事でプログラマやってんなら、それこそ会社に理解があろうがなかろうが検証時間取れないなんて事はないだろう。
どっちにしろ>>124と条件が被ってるんで>>147のtest2を参考に作り直せば速度的にはどうにかなるんじゃないの。
0197デフォルトの名無しさん (スプッッ Sdf3-6PtN)垢版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
0198デフォルトの名無しさん (ワッチョイ 993d-XDX8)垢版2017/09/15(金) 19:01:40.44ID:HxJpFmSs0
>>197
たぶんこれ、マスターシート?の一行目が項目になっている事から、
編集→テーブルでテーブル化してフィルタで絞ってコピペした方が早いんじゃないの。

種類の所だけ

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

みたいな形で空白を埋めるようにして。
0204デフォルトの名無しさん (ササクッテロレ Sp4d-dVTt)垢版2017/09/16(土) 17:35:52.97ID:ZtR64OGap
excel2010使ってます。

apiを使ってアプリケーション外の任意の座標のピクセル情報を監視していますが、視覚的に監視している場所がわからないので、当該場所にbitmapを最前面に描画したいのですが、良い方法はないでしょうか?
あるいは、マウスのカーソルをその位置に描画する。とかも考えています。
0205デフォルトの名無しさん (オッペケ Sr4d-Ec1/)垢版2017/09/16(土) 18:35:05.61ID:uv+MHauzr
>>204
愚問だけど
なぜにVBAなんだ?
0207デフォルトの名無しさん (アウアウカー Sa1d-+tv6)垢版2017/09/16(土) 21:10:59.05ID:XK5pYCg9a
>>206
昔、そういうプログラム書いてたな。
CreateCompatibleDCとか。

GDI+はステータスバーの数字を取得する為に使ったことがある。
よくあるウインドウハンドルから取得する方法やUIAutomation使う方法で取得出来なかったんで直接Bitbltかなんかで描画してるとしか思えなかった時に。
0208デフォルトの名無しさん (ワッチョイ 136c-XDX8)垢版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
0209デフォルトの名無しさん (ワッチョイ 1311-T94+)垢版2017/09/17(日) 15:23:31.58ID:EJ9y/eYt0
>>208
pdfは元々バイナリファイル
それをテキストエディタで開けばその画像みたいになる
エディタで開く時のエンコーディングが違えば文字化けの見た目も変わる

postするときになんで変換しないといけないの?
0210デフォルトの名無しさん (ワッチョイ 136c-XDX8)垢版2017/09/17(日) 15:37:36.74ID:QbcXsmvT0
>>209
普段のブラウザでpdfを投稿した際のpostデータを解析したらpostしているデータの中でpdfを>>208の画像の形で投稿していたので
excelで投稿する際も自分のpcにあるpdfをテキスト状に?変換してpostするものだと思いました
自分としてもファイルのフルパスだけ指定して投稿できたら楽だとは思うのですが・・・
0211デフォルトの名無しさん (ワッチョイ 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の画像がこの画像と違ってどういう形式?なのか分かれば調べようもあると思うのですがいかがでしょうか
0212デフォルトの名無しさん (ワッチョイ 5b6d-M8tZ)垢版2017/09/17(日) 19:10:29.54ID:qW/WD7mR0
バイナリ変換とか変なことをするからややこしくなっている
データの解析なんてせんでいい
ファイルは素直にファイルのまま扱えばok

http://www.excel.studio-kazu.jp/kw/20140404154224.html
で、ここ見ておもったんだけど、htmlファイル作ってform用意して、submitすればいいだけじゃない?
ファイルが何個もあるとめんどくさいけど
0213デフォルトの名無しさん (ワッチョイ 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できないかなぁ・・・というのが現状です

説明が下手で申し訳ないのですがどなたかアドバイス頂けたらと思います
0217デフォルトの名無しさん (ワッチョイ 2baa-o7xi)垢版2017/09/18(月) 12:28:31.10ID:XMy/3GFW0
ネットワーク上のフォルダにファイルを保存する時、
初回時のみ若干保存に時間がかかります。
一度実行したあとにすぐ実行すると、
既にネットワーク接続が確立しているからなのか、比較的早く保存できます。
保存は普通にsaveasで、UNCパスで保存しているのですが、
この初回保存時に時間がかからずに保存できる方法ないでしょうか。
0224デフォルトの名無しさん (ワッチョイ 5b23-o7xi)垢版2017/09/18(月) 17:38:30.84ID:zFeh6Anl0
>>222
普通にVLOOKUPで引っ張ってくれば
マクロは必要ないのではなかろうか。

どうしてもVBAでやりたいなら
WorksheetFunction.Matchで検索してみよう。
シート間コピペはRangeの前にワークシートオブジェクトを指定すればできます。
範囲でやる場合はValueを書かないとだめです。
Worksheets("シート2").Range("*:*").Value = Worksheets("シート1").Range("*:*").Value
実際には決め打ちじゃなくてCellsで検索結果に応じて可変にすればよいでしょう。
0226デフォルトの名無しさん (ワッチョイ 11a3-24l8)垢版2017/09/18(月) 20:17:48.27ID:iDSQnxIm0
>>222ですがコピペ記述できました助言ありがとうございました

Sub

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

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

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

  Application.ScreenUpdating = True

End Sub

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

VLOOKUPだと直接セルに入力する場合があってその時困るのでVBAでやってみようと思った次第です
ACCESSは諸事情で使えません
0229デフォルトの名無しさん (ワッチョイ 5b23-o7xi)垢版2017/09/18(月) 21:06:56.54ID:zFeh6Anl0
>>226
たぶんマクロ記録を改造しているんだと思いますが
Select、Activateはする必要なく
転記処理は
ws2.Range("a6:f6").Value = ws1.Range(ws1.Cells(r,4),ws1.Cells(r,9)).Value
この1行だけでいけるはず。
=の右辺と左辺が同じ大きさの範囲である必要あり。
範囲は実際のシートのに書き換えてお試しを。
0231デフォルトの名無しさん (ワッチョイ 5b23-o7xi)垢版2017/09/18(月) 21:38:27.20ID:zFeh6Anl0
>>227
応用シートを変数に突っ込む
WithにRange指定まで突っ込む
RangeをCellsにして列参照を変数にする
オフセットの数値を変数にする
これでループで変数をインクリメントしていけばスッキリしそう。
0232デフォルトの名無しさん (ワッチョイ 993d-XDX8)垢版2017/09/18(月) 21:41:20.89ID:tGO6qMv20
>>227
Sub foo()
Str_NowRng = FindRange.Offset(0, 1).Address
Str_ShuName = FindRange.Offset(0, 1).Value
Set 基礎 = Worksheets("基礎")
Set 応用 = Worksheets("応用")
i = 4
Do While Str_ShuName = "A"
For j = 1 To 5
応用.Cells(i, j + 1).Value = 基礎.Range(Str_NowRng).Offset(0, j).Value
If j = 3 Then 応用.Cells(i, j + 1).Value = 応用.Cells(i, j + 1).Value + Val(MSUN)
Next
With 基礎.Range(Str_NowRng).Offset(1, 0)
Str_ShuName = .Value
Str_NowRng = .Address
End With
Loop
End Sub

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

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

でもエラーが出てしまいます・・・。
0235デフォルトの名無しさん (ワッチョイ 5b6d-A1Wv)垢版2017/09/18(月) 21:59:25.32ID:jDUrs+BF0
>>234
何でそんなことやってるか知らんけど…

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

とりあえずイミディエイトウィンドウやウオッチ士気で、
UserForm2.Caption
に何が入ってるか見てみたら?
0236デフォルトの名無しさん (ワッチョイ 11af-6PtN)垢版2017/09/18(月) 22:04:09.39ID:d9P11nJN0
Str_NowRng=FindRange.Offset(0,1).address
Str_ShuName=FindRange.Offset(0,1).Value
With Worksheets(〃基礎〃)
i=4

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

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

Loop

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

i=32
Do While Str_ShuName=〃C〃
中身同じ
Loop
こんな感じです。
パソコン見ながら打ったので間違って打ってたらごめんなさい。
0241デフォルトの名無しさん (ワッチョイ 6169-XDX8)垢版2017/09/18(月) 22:09:56.31ID:m1CRg0zL0
>>235 ありがとうございます。 他のユーザーフォームではできましたので、USERFROM8自体がおかしくなっている?
直前にエクセルが動作停止しました。その際に壊れてしまい、USERFORM8のオブジェクト名を理解できていないようです。
そんなことはありますでしょうか?
0243デフォルトの名無しさん (JP 0H35-+tv6)垢版2017/09/18(月) 22:25:10.48ID:SpW0zo9eH
>>226
>>229の言う通り

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



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

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

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

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

それから、Range("B" & i ).Valueって記述だけど、RangeじゃなくてCells使えば列方向もj使って繰り返しが使えるよね。
まあ、真ん中だけ少し違うから恩恵少ないけど。
0253デフォルトの名無しさん (アウアウカー Sa1d-+tv6)垢版2017/09/19(火) 12:11:26.47ID:JjVbyw/1a
>>248
初心者は設計に問題がある場合が多いわけで。
真面目に回答してもすったもんだして結局>>221が採用されることも多い。
質問の仕方もダメダメな場合が多いから、回答も段々きつくなる。

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

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

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

それにVBAはだいたいネット検索すれば解決策が載ってるんで(凡例が少ないという事はあるけど)、
自分で解決してから「こういう方法以外にどのような解法があるか」と聞いてくるのが一番正常なのかもしれないね。
0259デフォルトの名無しさん (ワッチョイ 398b-MDSF)垢版2017/09/19(火) 21:47:07.38ID:r8s5qxxU0
つべこべ文句言ってねえでお前らなんかに質問してくれるだけ有り難いと思えよ
0260デフォルトの名無しさん (スプッッ Sdf3-uHQa)垢版2017/09/19(火) 23:27:39.48ID:44Sr5E9Ld
ここはVBAの作成依頼もOKですか?
0262デフォルトの名無しさん (スプッッ Sdf3-uHQa)垢版2017/09/19(火) 23:38:49.19ID:44Sr5E9Ld
>>261
B2〜B40までのセルをダブルクリックすると検索ボックスが出てきてE2〜E25までのデータを検索出来るようにしたいです(実際のデータは1500個くらいありますが)
検索ボックスにaと入力するとaを含むデータがリスト化されて出てきて、そのリストをダブルクリックするとBの列にそのデータが貼り付けされる
っていうのを作りたいです
http://imgur.com/gMJqp1I.jpg
0264デフォルトの名無しさん (ワッチョイ 398b-ZzG1)垢版2017/09/19(火) 23:54:26.79ID:r8s5qxxU0
バカはいつも突然やってくる
0265デフォルトの名無しさん (ワッチョイ 5b6d-jqo8)垢版2017/09/19(火) 23:54:28.98ID:llsJeX6S0
>>262
とりあえず写真じゃなくスクリーンショットで頼む
モアレになって鬱陶しい

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

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

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

リボンを改造して専用のボタンを用意する方法があるので、
そこからフォームを呼び出してツールであるかのように見せるのが限界。
0268デフォルトの名無しさん (スプッッ Sdf3-uHQa)垢版2017/09/20(水) 00:01:43.09ID:+p3KI42td
>>265
ありがとうございます
スクショは今は撮れませんが明日できれば撮ります
0270デフォルトの名無しさん (ワッチョイ 993d-XDX8)垢版2017/09/20(水) 00:33:24.59ID:rbLHucI/0
変な作り話しなくても、会社とか学校のPCとかで内部データ持ち出せない場合は、
そういう風にするしかないって擁護すればいいんじゃないの。(その場合でも画面の写真撮るのは拙いけど)
0272デフォルトの名無しさん (アウアウカー Sa1d-+tv6)垢版2017/09/20(水) 19:48:21.95ID:WlNCuA1ya
>>262
B列のダブルクリックとか設計がよろしくないね。
検索ボックスってのはフォームと推測。
B列への入力ってのは検索したリストの中から選択したものを入力ってことと推測。

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

https://pastebin.com/ye8PZecY
0273デフォルトの名無しさん (スプッッ Sdf3-wsdZ)垢版2017/09/20(水) 20:37:33.76ID:JB1iCPlvd
>>265,267,271,272
みなさんありがとうございました
色々コピペですがおかげで何とか出来ました
0274デフォルトの名無しさん (ワッチョイ 398b-MDSF)垢版2017/09/20(水) 21:25:43.55ID:6Jeed1fg0
>>272
設計がよろしくないねwwww

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

煽りじゃなくてマジもんのクソだっつーのそのUI
しかもコードは小学生の初めてのプログラミングレベルだぞお前
0276デフォルトの名無しさん (スプッッ 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というかプログラミング初めてなので勉強になりました
みなさまありがとう
0280デフォルトの名無しさん (アウアウカー Sa1d-+tv6)垢版2017/09/20(水) 23:30:23.54ID:1NkuNAa7a
>>276
そこのサイトのコードだと毎回下記手順になるんだけどそれでOK?

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

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

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

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

フォーム表示中にリストボックスダブルクリックで入力するセルが選択できるようになる。
フォームの終了はxボタンで。
0281デフォルトの名無しさん (ワッチョイ 398b-MDSF)垢版2017/09/20(水) 23:31:16.68ID:6Jeed1fg0
>>278
初心者の人?wwwwwww

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

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

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

残念だが、君はとっても恥ずかしい人だ。
というかね、煽るだけで具体的な内容が無い。
どこが悪いか全く言及出来てないのが笑える。
0284デフォルトの名無しさん (ワッチョイ 4623-PvnN)垢版2017/09/21(木) 00:11:10.32ID:vjoJajys0
>>276
自分がよく使う、なんちゃってインクリメンタルサーチコードを差し上げよう。
一文字打つごとに検索結果が絞り込まれるよ。
検索ボックスのChangeイベントにコピペしてオブジェクト名は書き換えて試してみてね。
数百件ならラグもないはず。

Private Sub TextBox1_Change()

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

If TextBox1.Text = "" Then Exit Sub

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

.Clear

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

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

' /////////////////////////////////////////////////////////////////////////////////////
' //#名称 Auto_Open
' //
' //#概要 ブックを開いたときの処理(Excelの特殊関数)
' //
' //#引数 なし
' //
' //#戻値 なし
' //
' //#解説
' //
' //#履歴 2017/09/21
' // Coded by Hogeta Hogeo
' //
' /////////////////////////////////////////////////////////////////////////////////////
0286デフォルトの名無しさん (アウアウカー Sa6b-XzBy)垢版2017/09/21(木) 00:34:34.85ID:OcnLMsdka
>>276
>>280に書いた内容だけど、よく考えたらB列以外にも入力されちまうわ。
元々の処理ではフォーム表示で入力セル固定だけど>>280では固定じゃ無くすので。

リストボックスダブルクリックの処理でアクティブセルに入力するようになってると思うけど、>>280を試すならアクティブセルの列がBの時だけ入力するようにしないといかんね。
0287デフォルトの名無しさん (ワッチョイ af8b-lQLN)垢版2017/09/21(木) 06:16:04.60ID:dREmj5Qv0
>>282
朝から笑わせてもらったw
なぜお前らはそこまで勘違い出来るのか?
勘違いこそが教えたがりクンになれる素養なのか?
大体分かってたけどw

まあお前らが勝手に勘違いしてるだけならいいが
他人に嘘を教えようとしたら盛大に告発させてもらうわw
0292デフォルトの名無しさん (アウアウカー Sa6b-XzBy)垢版2017/09/21(木) 17:33:45.86ID:w3PiJp4aa
>>287
どこが悪いのか指摘出来ないというのが苦しいね。
批判出来るということは悪い所がわかるということの筈なんだけどな。
悪い所が分かる程の能力は無いけど、取りあえず煽ってみましたってところかな。

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

ま、無理だろうけど。
0293デフォルトの名無しさん (スプッッ Sd4a-Ir9i)垢版2017/09/21(木) 17:40:03.03ID:3c3Fmrq2d
>>276です
皆さんありがとうございます
質問なんですが
http://infith.com/system/excel/vba_form_find/
によると
RowSourceに"科目マスタ!A2:A" & wLastGyouを入れないといけなのでしょうか?
プロパティのRowSourceに値を入れようとしてもエラーが出ます
0294デフォルトの名無しさん (アウアウカー Sa6b-XzBy)垢版2017/09/21(木) 18:42:41.24ID:w3PiJp4aa
>>293
そもそも、どうしてRowSourceにこだわってんの?
君のやりたいことでは必要無いと思ってたんだが。

RowSourceってのは融通が効かないから自分は基本使わないんだが、エラーになってるとしたらRowSourceとAddItemが共存出来ると思ってるとかかな。
RowSourceはシートの指定範囲のデータをリストにするもので、そこに追加やそこから削除は出来ない。
指定範囲のデータだけでリストは完結することになる。
そこでそのリンク先でも絞り込みの前に.RowSource=""を入れてる。
0296デフォルトの名無しさん (ワッチョイ af8b-lQLN)垢版2017/09/21(木) 22:35:38.87ID:dREmj5Qv0
>>292
批判wwwwww

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

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

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

ま、何言ってるか分からないだろうけど。
0299デフォルトの名無しさん (ワッチョイ af8b-lQLN)垢版2017/09/21(木) 23:45:26.82ID:dREmj5Qv0
>>298
技術的要素wwwwwww

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

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

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

それがお前だ。
技術的要素無しであの葡萄は酸っぱいと言ってるキツネのようだ。
0302デフォルトの名無しさん (ワッチョイ af8b-bXGz)垢版2017/09/22(金) 00:05:31.90ID:XNPiuLNV0
もうなりふり構ってられなくなったなw
いいよその調子w
0304デフォルトの名無しさん (ワッチョイ 06e4-XBbO)垢版2017/09/22(金) 02:57:45.48ID:zgKhpRaR0
久しぶりにこのスレ戻ってきたけどまた随分荒れてるね。

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

そんなことより変更に対して厳しく、追加に対しては寛容になるような作りにするような
もっと基本的なことを念頭におくようにした方がより効率的に改修出来たりするよ。
0305デフォルトの名無しさん (ワッチョイ af8b-lQLN)垢版2017/09/22(金) 07:49:01.52ID:XNPiuLNV0
また教えたがりが一匹ふえたw
0311デフォルトの名無しさん (アウアウカー Sa6b-XzBy)垢版2017/09/23(土) 09:39:55.56ID:hX9NlXapa
ルールで縛らないで良いなら質問と回答以外書き込むなと書くこともアリだろ。
アホなこと書いても良いが、その分そいつが批判されるのも仕方ないということ。

アホな初心者がかつて批判されたことを根にもって相手の力量も分からずに噛みついてるんだから批判されても仕方ない。
0318デフォルトの名無しさん (ワッチョイ 3b6f-HalC)垢版2017/09/23(土) 13:49:15.21ID:HcxyMvzb0
>>313
HaskellでNLPやってて、小回り利くなと感じた。エクセルの事務作業と相性いい。

>315
エクセルのフィルターとまさに同じ、
例えば[10,2,34,401]から偶数を抜きたければ、
filter (\x -> mod x 2 == 0) [10,2,34,401]などとやる。
桁が三桁のを抜くなら、
filter (\x -> length x == 3) [10,2,34,401]とか。
0321デフォルトの名無しさん (ワッチョイ 466d-XBbO)垢版2017/09/23(土) 14:09:02.53ID:BetVnWHy0
EXCELはシートにSQLが使えるから場合によってはそっちの方が使えるのでは。
LINQやラムダ式でガッツリやりたいのであれば
もうEXCELの範疇を超えているので
.netでentityFreamworkとか使ってやった方がいいと思うよ。
0326デフォルトの名無しさん (ワッチョイ 06e4-vS2A)垢版2017/09/23(土) 19:18:36.34ID:paUCbsLX0
>>324-325
特定の状況では結果が異なるから完全に同一ではないけどな

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

eofがTrue/Falseしかないなら同じ動作だけど、そのどっちでもない場合は同じ動作するとは限らん
Null扱うなら覚えておかないとはまるぞ
0328デフォルトの名無しさん (ワッチョイ 06e4-vS2A)垢版2017/09/23(土) 19:56:35.16ID:paUCbsLX0
>>327
VBAには暗黙の変換ってのがあってな
>Notはビット反転
数値型に対してはな
真偽値にたいしてビット演算は規定されていないはず

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

Do Loopのヘルプにわざわざ
>引数 condition の値が Null 値の場合、引数 condition は偽 (False) であるとみなされます。
ってかいてあるだろ
0332デフォルトの名無しさん (ワッチョイ 06e4-vS2A)垢版2017/09/23(土) 22:09:48.51ID:paUCbsLX0
>>330
それが分かってれば問題はないんだけど、分かってても勘違いしたりするからなぁ
Nullの扱いが直感的じゃないってのが最大の敵

>>331
VBAのTrueは-1だからな
Not -1とかNot CBool(1)とかならFalse扱いだし
0335デフォルトの名無しさん (ワッチョイ af8b-bXGz)垢版2017/09/24(日) 02:19:39.33ID:3BjqQEbI0
ハイ戻ってきましたぁ!
また調子こいた教えたがりがしゃしゃってんのか?
バカはどいつだ?
0341デフォルトの名無しさん (アウアウカー Sa6b-XzBy)垢版2017/09/24(日) 09:43:55.42ID:SDtHFGLja
>>314
ここで言われてる初心者ってのは殆どの場合、他の言語も初心者ってことだぞ。
技術的に初心者だから初心者と呼ばれてる訳じゃない。
自分の画面を見ることが出来ない相手にも伝わるように書くとか、条件を小出しにするとか、相手をロボットか何かと勘違いしてるような初心者以前の問題が有るから否定的な意味で初心者と言われてる。

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

内容が何ーつ無くて罵倒しか出来ない初心者君の真価が問われてる。
0352デフォルトの名無しさん (アウアウカー Sa6b-XzBy)垢版2017/09/24(日) 13:52:50.28ID:SDtHFGLja
>>349
>>351

バーカ。

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

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

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

だが俺にバカを嘲笑うのをやめろと言うのは土台無理な話だ
だってバカは面白いんだものw
これくらいはその小さな脳ミソでも理解出来るよね?おバカさんw
0355デフォルトの名無しさん (ワッチョイ ff3d-hoCt)垢版2017/09/24(日) 16:43:54.18ID:vk2rgPVS0
この罵倒しかしないヤツはVBAコードの一つも読めないのに何年も前から張り付いている本当の意味での異常者で、
どうも現実の生活で誰にも構ってもらえないからネットで罵倒を繰り返してレスポンスをもらって喜んでいるみたいなので、
各員は餌を与えないでください。いつまでも無意味なレスがついて荒れるだけです。

対策として「晒したコードに対し具体的なコードをつけて指摘しているもの以外は相手にしない」っていうテンプレでも追加してほしい。
0361デフォルトの名無しさん (アウアウカー Sa6b-XzBy)垢版2017/09/24(日) 17:05:32.05ID:jWeMnfEta
>>358
コメントの代わりに
#If 0 Then
は昔よく使ってたなあ。
最近は全く使わなくなった。
Not 1もNot TrueもIf -1 Thenも使ったこと無いな。

こういうのはその人の趣味というか癖みたいな問題だわな。
どれが良いとか悪いとかの問題じゃない。
0363デフォルトの名無しさん (ワッチョイ a71e-NQgr)垢版2017/09/24(日) 17:09:54.28ID:3B64fACL0
MS系のBASICはずっと昔から「0」と「0以外」で真偽を判定するから、論理式では1もNot 1もありえない
もちろん-1なんかも使わない
俺の知る限り、約40年前に発売されたN-BASICの時代からこの仕様は変わってない
0367デフォルトの名無しさん (ワッチョイ 8a11-gXon)垢版2017/09/24(日) 17:29:04.13ID:gFeQddMX0
>>330
> 「Nullが含まれる式は必ずFalseとして判定される」と書かなきゃいけなかった。
ところがどっこい
If 2 Or Null Then 〜 Else 〜 End If
は True (と言うか整数の2)と評価されたりするんだな
0 Or Null は Null になるとか挙動が読めないけど
@Excel 2013
0374デフォルトの名無しさん (ワッチョイ af8b-lQLN)垢版2017/09/24(日) 18:54:12.91ID:3BjqQEbI0
>>368
人並みに頭に来てんだおバカさんw
結構結構、もう少し熱くなって一度爆発でもしていまえば少しはクールになるかもねw
お前のちっぽけな脳ミソもw

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

というかうっかりNot 整数をやっちゃったぜって事ならイミディエイトウィンドウで確認する癖を付けた方がいいと思う。
0379デフォルトの名無しさん (ワッチョイ 8aaa-Dc1X)垢版2017/09/24(日) 20:25:18.45ID:J5lzydll0
組み込みの Is〜 が As Boolean になっているけど
自分の Is〜 は As Long にしたくてそうしてるんだけど、返り値を受けた時の書き方を
統一的に扱えないのが悩みの種なんですよね...
0389デフォルトの名無しさん (アウアウカー Sa6b-XzBy)垢版2017/09/24(日) 22:16:54.54ID:SDtHFGLja
>>374
小学生に罵倒されれば誰でも頭に来る。
内容が無ければ尚更だ。
それに、小学生はきちんと躾ける主義でね。

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

質問に関係無いことしか書かないバカが人に対してここに来るななどと言う資格があるわけ無いだろう。
そんなことも分からないから小学生と呼ばれるんだ。
0391デフォルトの名無しさん (ワッチョイ af8b-Ncsu)垢版2017/09/24(日) 22:24:54.53ID:3BjqQEbI0
>>389
お前小学生にもバカにされてんのかwwww
最近の小学生もすてたもんでもないなw
0394デフォルトの名無しさん (ワッチョイ af8b-Ncsu)垢版2017/09/24(日) 22:39:03.86ID:3BjqQEbI0
>>393
お?少しは謙遜の気持ちも芽生えてきたか?w
でもお前は百害どころか毒にも薬にもならんよw
だってバカなんだからw笑えるけどwww
0395デフォルトの名無しさん (ワッチョイ 3bb1-Dc1X)垢版2017/09/24(日) 22:52:38.60ID:z5Fx3/zG0
誰か助けてください。

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

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

何とかしてソースコードを取り出すことはできないでしょうか・・。
0400デフォルトの名無しさん (ワッチョイ ff3d-hoCt)垢版2017/09/25(月) 00:01:40.54ID:AH/NDHtT0
>>398
確かにエクセルは保存をかけても終了するまで保存しないんだよな。たぶんXML形式にして保存する関係からだとは思うけど。
自動バックアップからなら修復の可能性はあるけど、マクロだけ消えたならそのファイル自体は元々マクロ書く前の状態なんじゃないかな。
0401デフォルトの名無しさん (ワッチョイ 4ab3-UH40)垢版2017/09/25(月) 00:02:16.67ID:Ch3TwtIS0
あはは、俺なんかそんなのしょっちゅうだぜW
ノリノリで良さげなコードが書けてる時に限って突然落ちやがるWW
もうね、マメに保存する癖を付けないとどうにもならないよね
0402デフォルトの名無しさん (ワッチョイ 06e4-vS2A)垢版2017/09/25(月) 00:05:47.41ID:PaZojpJN0
>>367
Orのヘルプに書いてある通り
True Or Null はTrue
False Or Null はNull
で、
CBool(2)はTrue
CBool(0)はFalse
なので、仕様通りの動作ではある

Orはどちらかが真なら真なので、片方が不定でも真だという理屈だな
ショートサーキットしないくせにな
どちらかが偽なら、もう片方に従うから、もう片方が不定なら不定
まあ、理屈として考えれば納得はできる
0403デフォルトの名無しさん (ワッチョイ 3bb1-Dc1X)垢版2017/09/25(月) 00:07:49.88ID:kbDcK8g50
>>396
朝から書き続けてたから1000行以上ある。かなりつらい。

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

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

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

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

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

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

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

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

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

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

>>401
今回のはマメに保存するというより、ブックを別ファイルにバックアップしないと対処できないかな。
今度から毎時間スナップショット撮るようにするわ
0411デフォルトの名無しさん (ワッチョイ 06e4-XBbO)垢版2017/09/25(月) 07:25:07.82ID:5kCjH3U30
>>341
はっきり言おう
VBA自体が間口が広いために初心者が扱い易い言語ではあるが
大きなシステムやWeb系には向いていないために
全体から見れば「VBAの上級者」というのは
所詮井の中の蛙に過ぎない。

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

つまりここで初心者がどうのと煽っている奴も
所詮は初心者の域を超えていない。
初心者が初心者を煽ってるだけ。
もっとも俺も自分を初心者じゃないなんてとても
おこがましくて言えないけどね。
0415デフォルトの名無しさん (オッペケ Sra3-Ncsu)垢版2017/09/25(月) 12:29:49.86ID:nP4bJmmCr
>>411
自分が初心者なら皆初心者に違いないってかw
賢いふりをしてるけどお前も>>341となんも変わらない無知を知らぬバカやぞwww
0416デフォルトの名無しさん (ワントンキン MMfa-GOPe)垢版2017/09/25(月) 12:51:20.05ID:b3e1p2YsM
403だけど、会社のEXCELでも試してみたらやっぱりクラッシュする
redim aaa(,1 to 2)
まぁコードとしては間違いだから滅多にこんな書き方しないんだけどさ
でも
redim aaa(,1)
なら、ただのエラー(赤字)になるだけでクラッシュしないから納得行かないわ
一応MSには送っておいた。
参考まで。
0417デフォルトの名無しさん (アウアウカー Sa6b-XzBy)垢版2017/09/25(月) 13:08:28.70ID:eYOvRkV+a
>>411
JAVAや.netのできる上級者も多いと思うが。
というか、上級者は他の言語もできる奴が多いだろ。
主戦上がどこかというだけだし、そもそも主戦上だって他言語の人もいるだろ。

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

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

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

マシン語もシミュレータでOS作りに挑戦してHello Worldで止まってる。
0423デフォルトの名無しさん (アウアウカー Sa6b-XzBy)垢版2017/09/25(月) 22:14:52.84ID:715ByDora
>>421
VBA上でやる場合はアセンブラが主体じゃなくてVBAで出来ない部分だけに適用するわけだから、アセンブラ自体はそれほど複雑じゃないと思う。
自分の場合は別の言語でmemcmp使ったことがあって、それをVBAに移植する場合に使いたい。
ただ、そのプログラムをVBAで実現する意味が薄いように感じるのと別にmemcmp使わなくても代替あるかもしれないんで実際に組むかどうかは分からないんだけど。
0425デフォルトの名無しさん (ワッチョイ ff3d-hoCt)垢版2017/09/25(月) 22:35:59.26ID:AH/NDHtT0
>>423-424
まぁそこまでするなら別の言語にした方がいいというか、そもそも発想が逆というか。

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

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

ちなみに勉強中にC言語ですらマシン語で直接組むよりも非効率になる可能性が高いと知ったんで学ぶ意味はあったけど。
0427デフォルトの名無しさん (アウアウカー Sa6b-XzBy)垢版2017/09/25(月) 22:52:54.75ID:715ByDora
>>424
自分はものにして無いので、そこまでしてない。
ものにしてる人にとってはそこまでしてなどと思ってないと思う。

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

ちなみに個人的経験では次善の策としてSQLを使ったら地獄を見た。
0429デフォルトの名無しさん (アウアウカー Sa6b-XBbO)垢版2017/09/25(月) 23:12:01.96ID:FBvoBYTya
>>426
正解。

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

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

>>429
まず、アーキテクチャが異なるCPUについては既にWin32APIの時点で使えない。
それにアセンブラが主ではない。
memcmpの部分で使うだけで使う方は呼び出すだけだ。
0437デフォルトの名無しさん (オッペケ Sra3-Ncsu)垢版2017/09/26(火) 12:18:09.16ID:YucCMyKYr
お前ら素直に感心する事も出来んのかw
惨めやのうwww
0439デフォルトの名無しさん (オッペケ Sra3-Ncsu)垢版2017/09/26(火) 12:27:34.92ID:YucCMyKYr
そうゆうひねくれた心を持っとるからいつまでたってもバカなんやで
0441デフォルトの名無しさん (アウアウカー Sa6b-XzBy)垢版2017/09/26(火) 16:11:30.66ID:PIh5pWG1a
VBAだけじゃどうにもならない、別途dllとの込みで扱うのはスマートじゃない。
そういう場合に使える方法があるということ。
他にもこの方法を使えればプログラムがスマートになるのにという場面もある。
これはVBAの制限によるものだけれど。

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

普通はVBAではこの機能は実現出来ませんと回答することになるだろう。
0442デフォルトの名無しさん (アウアウカー Sa6b-XzBy)垢版2017/09/26(火) 16:25:14.72ID:PIh5pWG1a
>>434
すまんね。
君がどういうレベルの話をしてるのか、いまいち掴めない。
実際、そういうことも分からないから勉強中なんでね。

アーキテクチャが違うCPUってのが何のことを言っていて、使えないCPUについて具体的にどうして使えないのか示して貰えるかな。
0448デフォルトの名無しさん (ワッチョイ 4ab3-UH40)垢版2017/09/26(火) 17:59:29.96ID:BLiEZOQr0
アドインを入れろというだけで嫌がられるのに・・・。DLLなんて言った日にゃ「何それ食えるの?おいしいの?」ってなもんで。
更にregsvr32で登録とか説明した途端「そんなメンドくさい事をやらずに出来ないの?」とかぬかされてムカついた今日此の頃
0453デフォルトの名無しさん (スプッッ Sd4a-6FY3)垢版2017/09/26(火) 19:48:34.37ID:r3ztyMSNd
シートをSQLでアクセスしたあとどうも変なことが起こる。
あしたデータをDBに入れてからSQLでアクセスして同じ現象が起きたら自分のプログラムミスだろうけど、
起きなければODBC for Excelを疑ってしまいそうだ
0455デフォルトの名無しさん (ワッチョイ af8b-lQLN)垢版2017/09/26(火) 22:11:26.14ID:Crd6WL0Z0
結局自分の知識を言いたいだけのお前らw
ババアの井戸端会議より無法地帯だなw
0461デフォルトの名無しさん (ワッチョイ eb6f-Dc1X)垢版2017/09/27(水) 09:53:24.11ID:rapuPXM40
      |三|
     /_____\
     |ギコーマン|
     |___醤油_|
     ,>:::(,,゚Д゚) <呼んだ?
     |(ノ.::::::::: |つ
     |:::::::::::::::::|
     ヽ___/
      U"U
0463デフォルトの名無しさん (アウアウカー Sa6b-XzBy)垢版2017/09/27(水) 12:19:47.02ID:OxJDgjzEa
>>457
もういい加減やめるけど、そのGUI部分で貧弱なMSForms使わずにCreateWindowExで組んでたりした。
んで、いろんな部品のクラス化とかを考えるわけ。
ところがどうしても制限でクラス内に置けないものがあるんでカプセル化が不十分なんだ。
それをアセンブラ使ってクラス内に置いてる人がいるもんですごいなあと。

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

まあ、所詮VBAなんてダメ言語ってことかね。
0464デフォルトの名無しさん (スプッッ Sd4a-6FY3)垢版2017/09/27(水) 13:00:28.04ID:/eBNIii1d
>>458
すまない
エラーが色々あってそう単純じゃなくてついね。

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

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

C++言語がインラインアセンブラを備えているように、どうしてもマシン語かそれに近しいものじゃないと実現出来ない事がある。
0466デフォルトの名無しさん (ベーイモ MM02-o32k)垢版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 & "")」のところでエラー発生…。

何か間違っているのでしょうか・・・。
0469デフォルトの名無しさん (ワッチョイ ff3d-hoCt)垢版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

エラーについては具体的なコードがないから分からないけど、
そのページの様な色分けやるならこんなコードとかの方がいいと思う。
0471デフォルトの名無しさん (アウアウカー Sa6b-XBbO)垢版2017/09/27(水) 21:01:26.56ID:WtGXLehDa
アセンブラやマシン語のことを神格化してる人がいるけれど
このスレにだって昔使ってた人もいるだろうし
ある意味覚えることが少ないからObject指向言語や関数型言語より簡単かも知れない。

でも昨今仕事上その知識が必要になることはまず無い。
いつまでも無用の長物にしがみついていないでその分別の勉強に力を配分した方が賢いとは思う。
0472デフォルトの名無しさん (アウアウカー Sa6b-XzBy)垢版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を分解出来ないからかな?
0473デフォルトの名無しさん (アウアウカー Sa6b-XzBy)垢版2017/09/27(水) 21:07:50.10ID:ZXhzFeMta
>>471
神格化なんてしてねーよ。
XBAじゃ出来ないから仕方なくだ。
出来るならやってる。

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

VBAでオブジェクト指向なんてやんなきゃ良かった。
0475デフォルトの名無しさん (ワッチョイ 4a11-IQsp)垢版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)
0477デフォルトの名無しさん (ワッチョイ af8b-lQLN)垢版2017/09/27(水) 22:10:23.63ID:9IoMVu120
お前ら何があっても絶対に>>474の様にはなるなよ
お前らには.Netでエクセルをいじるくらいなら肥溜めに突っこんだ手でちんこいじった方がなんぼかましだという事を知ってほしい
0478デフォルトの名無しさん (アウアウエー Sa82-0s0S)垢版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個ほどグラフを作っているところです。
線形近似式を作るまでなら出来たのですが、
近似式を取得しようとすると、★★★のところで
「プロシージャの呼び出し、または引数が不正です」となります。

ステップインでやるとエラー無く通るので、☆☆☆の反映が遅いのか・・?
と、よく分からなくなっております。ご助言頂けますと幸いです。
0480デフォルトの名無しさん (ワッチョイ ff3d-hoCt)垢版2017/09/27(水) 23:23:42.05ID:PSADxl6o0
COMをVBA以外から触るのってくっそ面倒なんだっけか。

確かに一度そういう記事を見たときに引数省略できないわ明示的に解放しないとメモリリークするわで、
下手に外部から弄るよりVBAだけの方が良さそうとは思ったな。
0483デフォルトの名無しさん (ワッチョイ 4d8b-6Ovz)垢版2017/09/28(木) 20:48:58.21ID:IZ7vMKly0
ところでさあ、お前らの中で「ボクはVBAerじゃない!」ってのが唯一の心の拠り所の人っている?…あ、いたwwww
0488デフォルトの名無しさん (ワッチョイ ed3d-asy+)垢版2017/09/28(木) 21:22:10.71ID:buJERvd40
>>486
ある言語が使えて他の言語が使えないなんてのはあり得ないから、
特別に何らかの言語を使えと言われてるのにVBAに固執してるとかでない限りは特に問題ないと思うけど。

もちろん別の言語使うとなれば移行期間と、それに掛かるコストの問題は発生するけど、
この移行で発生するコストに収支が見合わないなら如何なる言語であれ移行する方がおかしいし。
0491デフォルトの名無しさん (ワッチョイ 4d8b-55BJ)垢版2017/09/28(木) 22:07:34.72ID:IZ7vMKly0
使ってるくせに(ニヤニヤ
何気取っちゃってんのw
0500デフォルトの名無しさん (ワントンキン MMa3-/LS6)垢版2017/09/29(金) 10:54:15.88ID:C0tsoTl7M
>>487
うわあああああああ!俺の会社でもそのバグが始まった。
昨日それ見てなかったら、原因分からなくてパニックやったわ。ありがと
これから数千あるマクロ軍と戦うから、既にパニクッてるんやけどな
0502デフォルトの名無しさん (ワッチョイ 2306-asy+)垢版2017/09/29(金) 11:24:31.88ID:BKm/kWdC0
>>499
んなこと出来るわけがない
ヲタプログラマの遊び道具はないんだよ
0505デフォルトの名無しさん (アウアウカー Sad1-3Z7M)垢版2017/09/29(金) 11:46:58.39ID:LnDObw+pa
拡張子で切り替えるとかはするかも。
でも、現行のVBAで出来ないことなんて殆ど無いわけで、新仕様作ってもそれで新しいことが出来る奴なんて殆ど居ないだろう。

いまだに4.0時代のマクロシート動かしてるところだって有るんだぜ。
そんな簡単に切り捨てられるわけがない。
個人的にはマクロシートは切り捨てて欲しいが。
0506デフォルトの名無しさん (ワッチョイ ed3d-asy+)垢版2017/09/29(金) 12:11:55.51ID:es7HpHgn0
ちょっと前にWindows 3.1からようやく移行した空港の話があったしな。

>>500
昨今はクラウドが流行ってて常に更新するのが流行ってるけど、
仕事で使うなら、やっぱりサポート切れて更新しなくなったヤツの方がいいな。
0519デフォルトの名無しさん (ワッチョイ a3af-lm4R)垢版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
0522デフォルトの名無しさん (アウアウカー Sad1-3Z7M)垢版2017/09/30(土) 09:40:29.40ID:JKOApPN+a
>>519
まず、日本語が変。
「この画像がシート2にあって」とか「が打たれて」とか。

FINDで板厚を検索するところまでできるならその後はー行ずつ幅と長さが両方共指定の値より大きくなるまでループすれば良いだけだろ。
何が分からんの?
0527デフォルトの名無しさん (アウアウカー Sad1-3Z7M)垢版2017/09/30(土) 10:43:02.05ID:JKOApPN+a
比較は同時にするでしょ。
各行の大きい方がシート1の大きい方より大きくて且つ各行の小さい方がシート1の小さい方より大きいのが求める値。

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

と、以上の発想でそれをVBAで組み込みばおk
長さと幅が逆転してても幅がオーバーした時点でチェック・メッセージ出せばいいんじゃね
0532デフォルトの名無しさん (ワッチョイ 4d8b-6Ovz)垢版2017/09/30(土) 21:59:05.80ID:1jTnlOmW0
サヴァン症候群のやつが紛れこんでるな
0533デフォルトの名無しさん (ワッチョイ 1511-haX9)垢版2017/09/30(土) 22:34:04.27ID:wxoKQfA20
VBAによるIE操作で土曜日潰しました。。
ビットコインの自動売買をVBAでやろうと思っていますが肝心の「買い」のボタンが押せません...プログラミング系の掲示板で聞いても挫折されてしまい、大ピンチです..万が一わかる方いらっしゃいましたらぜひ教えてください....

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

↓↓ コードです
0537デフォルトの名無しさん (ササクッテロラ Spe1-K4J0)垢版2017/09/30(土) 22:50:02.92ID:LQYU2gZ2p
533です

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

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

今は自動運転ならchromeのが簡単
入力もクリックもブラウザ組み込みのスクリプトでたいてい可能
0546デフォルトの名無しさん (オッペケ Sre1-R4yE)垢版2017/10/01(日) 02:13:12.92ID:nppNViK/r
vbaよりjsいちがいいよな
0547デフォルトの名無しさん (アウアウカー Sad1-3Z7M)垢版2017/10/01(日) 13:38:34.30ID:PxgxVv4ea
>>544
使えなくなってるか?
どんな所で?
俺は問題なく使えてるように思うが、どこが駄目になったの?

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

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

泣けてくるぜ・・・
0551デフォルトの名無しさん (ワッチョイ a3b3-Ddq2)垢版2017/10/01(日) 19:19:07.34ID:1isdaW610
>>549
スマホとタブレットの普及でPCわからないのがデフォになっちゃったからなぁ。今年4月に入社したT大出のヤツが「マクロ教えて下さい」と
言ってきたんだが内心「どんだけハイレベルな質問されるんだろ」とガクブルしてたらシート関数ですらSUMしか知らないとかそんなレベルだったんで驚いた。
講義でC言語やったそうだけど「さっぱりわからなかった」そうで。こりゃ日本やべえよ
0553デフォルトの名無しさん (ワッチョイ a3b3-Ddq2)垢版2017/10/01(日) 19:27:45.32ID:1isdaW610
>>550
だってね、PYTHONってのはもう、dotnetやってて「こんなのがあったらいいのに」と考えるモノが全部そろってるんだよ。
俺のやってる仕事はGISなんかも使うんだが、こういうのはもうPYTHONの独壇場で、殆どコード書く必要が無いぐらい出来あいのが
充実してるのよ。EXCELに特化したライブラリもある。全体に動作がモッサリなのが難点なのと、文字コードで頭が禿げそうになる、PYTHON3系なら大丈夫かもだが。
0556デフォルトの名無しさん (ワッチョイ a3b3-Ddq2)垢版2017/10/01(日) 19:39:46.20ID:1isdaW610
>>555
機械学習なんかで注目されているpythonがイマイチ普及しない理由はコレって言われているぐらいだからね。
0557デフォルトの名無しさん (ワッチョイ 4d8b-6Ovz)垢版2017/10/01(日) 20:07:01.84ID:l4AEDu2B0
元からハゲのくせに何ちょっと見栄はってんだよw
0559デフォルトの名無しさん (アウアウカー Sad1-3Z7M)垢版2017/10/01(日) 20:24:19.84ID:GsAXo2mba
>>553
GISって言ったら昔の話だがGoogle Geocoding API使ってVBAで住所→緯度経度取得は簡単に出来たな。
Yahooも出来たと思う。
xml扱えれば誰でもできる。
VBAでの簡単ってのが他言語に比較して不明だが。

ただ、それやって良いかどうかが分からん。
Webに埋め込んだりするのは良いんだろうけど、自分が情報取得する為に使って良いんだろうか。
0561デフォルトの名無しさん (アウアウカー Sad1-3Z7M)垢版2017/10/01(日) 21:26:28.19ID:GsAXo2mba
>>560
うん、それは知ってた。
けど、それはそれを利用したwebサイトに訪れる人数を意味してると思ってた。

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

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

https://i.imgur.com/GNoEnCb.jpg
0565デフォルトの名無しさん (ワッチョイ cbc7-LMkv)垢版2017/10/02(月) 08:16:05.11ID:vqsqdnCg0
>>563
回答ありがとうございます。
9は何の数字でしょうか?

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

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

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

保存、閉じる

次のファイル○○02.xmlsを開く
ファイル名の数字は増えたり削除されたりするので、○○が含まれたファイルを順次開いていく感じにしようと思います。
0575デフォルトの名無しさん (オイコラミネオ 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の後にブレークポイントを設定してもすり抜けているようです…
よろしくお願いします。
0577デフォルトの名無しさん (オイコラミネオ MM2b-pY8a)垢版2017/10/02(月) 18:17:23.60ID:HNUJs0p8M
>>576
ところが同じコードでIf〜の行を削除して二行目をElseIf→Ifに直したところちゃんと動いているようなのです。
最初のIfにマッチしてるということは無い筈なのですが…
0581デフォルトの名無しさん (ワッチョイ 1b9f-IQJU)垢版2017/10/02(月) 21:21:19.44ID:IbhHl2kC0
>>577
変数が期待通りになっていないんだと思う。
ステップ実行していけば変数がどう変化しているかすぐわかるんだけど
まだデバッグを使いこなせないビギナーさんなら
msgbox var
をいたるところにちりばめて実行して
メッセージボックスで変数の変化をみるという方法があるよ
自分もデバッグ?なにそれ?なころはそうやってた
0583デフォルトの名無しさん (ワッチョイ 6a96-BYga)垢版2017/10/05(木) 18:21:05.77ID:gtEpGXfw0
win10 64bitでExcel2016使ってるんだけど

最近やたらに、「メモリ不足〜64bit版に〜」的なポップアップ出てフリーズするんだけど
なんかアプデで仕様でも変更したんかな
0584デフォルトの名無しさん (ワッチョイ 4103-r61h)垢版2017/10/05(木) 23:19:02.08ID:VoC8r++Z0
どんな理由でフリーズする仕様にしなきゃならんのだ
いくらmsさんとは言え濡れ衣にも程がある
0589デフォルトの名無しさん (ワッチョイ 7afe-saRv)垢版2017/10/10(火) 03:19:47.77ID:Sh5NAJQR0
とあるcsvファイル(測定器の出力でかなり細かい数値データ)があるのですが
この数値をExcelで一部変更して保存すると全体的に数値が勝手に丸まったりしてしまいます…
(変更していない数値も全て)
色々調べたのですがこのあたりは仕様?みたいなのですがなんとかならないものなのでしょうか
0593デフォルトの名無しさん (ワッチョイ 7afe-saRv)垢版2017/10/10(火) 12:05:43.76ID:Sh5NAJQR0
>>590-592
どうもありがとう、なんとか自己解決しました
ここで聞いたのは、一応一連の処理をVBAでやっていたので…

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

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

> 例えば、1.00000はどうやっても1になってしまいます
Excelで書式を設定して上書きすればいいだけ
当然csvには書式は格納されないので書式の設定は毎回必要
0596デフォルトの名無しさん (ワッチョイ b1d5-XSap)垢版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形式で保存するなら、丸められることなく正確な値を保存できる)
0597デフォルトの名無しさん (ワッチョイ 7afe-saRv)垢版2017/10/10(火) 15:46:51.35ID:Sh5NAJQR0
>>595-596
どうもありがとう
CSVを普通にExcelで開いた時点での表示形式は指数になってます
この時点ではある意味見た目上も全桁数表示されてるのですが
csv保存するときに自動的に普通の数値に変換して更に丸めてしまうみたいです
よくわからないのは0.00001は丸められないけど1.000001は1に丸められます
Excelのバージョンは2016です

いずれにしろ表示形式を変えることで対処するしかなさそうですね
とりあえず文字列にしてしまえば全て保存できるようで何よりです
確かにxlms形式なら全て保存できるみたいなのですが
測定器がcsvで吐き出すことを前提に色々と組んでしまっているので…
0601デフォルトの名無しさん (アークセー Sx75-CSH4)垢版2017/10/10(火) 16:10:44.15ID:f04ktCAUx
Outlookで指定したメールのtoアドレスとccアドレスをエクセルに書き込みたいのですが、itam.TOとCCにすると名前が書き込まれてしまいました。そこでTOをやめてitam.SenderEmailAddressにしたらアドレスが入ったのですがCCは見つけられませんでした。
分かる方、お言えてもらえませんか?
0603デフォルトの名無しさん (ワッチョイ 1aa4-Ko7M)垢版2017/10/10(火) 19:18:52.42ID:Gdc/ZOOr0
会社で「顧客名簿のDBから吐き出したCSVをエクセルで編集して又システムに
戻したいんだけど遅いくて困ってる」と言われて「エクセルじゃなく専用エディタでやれよ」
と言ったら「勝手にフリーソフトをインストールできない」と言う。つまり、泣き付けばマクロで作ってくれると思ったんだろうな。

冗談じゃねえと思ったが興味本位でネット漁って作ってやったよ。礼の一言もなんも無しだが、何も言ってこないから普通に使えてるんかな。
CSVをエクセルに食わせるのはQueryTableが一番?速いみたいね。データ型も指定できるし。保存は保存するディレクトリにブックをコピーして
書き出すとまあまあ速かった。と言ってもせいぜい30000件程度(会社規模が知れるw)だからあんま参考にならないかもだが。
0605デフォルトの名無しさん (ドコグロ MMc2-Nz6W)垢版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に丸められます
それ指数表示でどうなってるかを見ればわかると思うが...
って言うか指数表示の意味わかってないのか?
0610デフォルトの名無しさん (ワッチョイ 7d60-25LY)垢版2017/10/11(水) 00:24:10.90ID:8tv9PUwe0
>>603
まさに神
0617デフォルトの名無しさん (ワッチョイ daeb-GMdf)垢版2017/10/11(水) 21:45:50.25ID:0mVU1QGV0
>>612
業務で作ったソフトは会社のもの
0619デフォルトの名無しさん (ワッチョイ d1e3-HnJS)垢版2017/10/12(木) 03:28:06.76ID:bkFDlrr00
企業だと、Excelは書類扱いやな
マクロも同じ(Excelを加工するExcelファイルという扱い)
「Excelマクロ禁止」って書いてない企業ならまぁ合法かもな(VBSはええんやで)
0627デフォルトの名無しさん (ササクッテロロ Sp45-97Ee)垢版2017/10/12(木) 12:56:55.18ID:+aWFVLPap
フリーソフトを禁止している理由として
著作権とかライセンス関係の理由なのか
ウイルスとかセキュリティ関係の理由なのか
それ以外か
複合的な理由かによるんじゃね

会社で作ったのなら著作権は問題ないだろう
ウイルスは問題無いけどセキュリティホール的な問題がある場合もありうるかなぁ
0629デフォルトの名無しさん (ワッチョイ 53fe-Zccp)垢版2017/10/12(木) 15:46:25.11ID:+VeyGWZM0
うちのお客の社員用PCでは拡張子exeのファイルは起動できない
そしてインストール権限を認めてないのでインストーラーを起動できない
この辺が必要な場合は上司を介して情報システム部に許可をとる必要がある

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

オープンソースなら商用利用も可能とは言い切れない
0634デフォルトの名無しさん (ワッチョイ 13eb-97Ee)垢版2017/10/12(木) 19:09:55.75ID:LSdt7/hd0
>>632
会社で作ったのなら言語に依らずフリーソフトにはならないんじゃね?

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

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

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

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

会社に損害を与えたら懲戒処分になる可能性があるのはどんな業務でも同じ
0639デフォルトの名無しさん (アウアウカー Sad5-EduE)垢版2017/10/12(木) 21:09:46.58ID:nSOq2nGha
そもそも、VBA込みの仕事が殆どじゃないの?
フリーソフトは許可が必要だろうけどVBAについては最初から込みの話であって、駄目なら最初からそういう指示がある筈だ。

フリーソフトは駄目だからVBAで同じ機能を実現すれば良い。
どうしても必要だけどVBAで作るのが難しいなら上司を説得するか有料のソフト買って貰うしかない。
0641デフォルトの名無しさん (ワッチョイ 13b9-b/Cf)垢版2017/10/13(金) 01:03:16.23ID:bhKH08Ce0
VBAでテトリスとかロックマンが作れるなんで知らなかったわ
というか感動した。

それを実装するのに特別な環境が必要だと思ってたけど、VBAだけで実現できるところがすごい
0648デフォルトの名無しさん (ワッチョイ 11b9-89ZN)垢版2017/10/13(金) 12:13:04.97ID:fnGHp6s50
本来は未認可のプログラム関連全面禁止のところVBAが抜け道的に使われているだけって場合が多いだろうから、
他のプログラムを使ってはならないのは何故かっていう疑問に合理的な回答は無いだろうなぁ。
0649デフォルトの名無しさん (ササクッテロラ Sp45-97Ee)垢版2017/10/13(金) 12:26:29.21ID:h1mGc1nrp
>>648
オフィスが許可されてるならvbaも許可されてるんじゃないの?

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

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

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

だいたいこのスレでも「お前が詳しいのはVBAであってエクセルではない」という戒めの言葉がたまに出るくらいだし。
0655デフォルトの名無しさん (アウアウカー Sad5-EduE)垢版2017/10/13(金) 15:27:59.93ID:qTuikjwpa
本来用途?
随分おかしなこというんだな。
何をやろうがそれが本来用途だろ。

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

フリーソフトが問題なのは責任を問えないからだ。
VBAで問題が起きた時に、作った奴や部署が責任を取ることになるのはどんなVBAでも同じこと。
だから良く知りもせずに結果だけをコピペする奴は迷惑なんだ。
仕組みを理解すれば何をやっててもセルの操作と同じだ。
部署として作った奴を信用するかしないかの問題。
或いは部署として危険なコードか安全なコードかと判断できるかどうか。
0656デフォルトの名無しさん (ワッチョイ 9933-BSx0)垢版2017/10/13(金) 15:39:50.72ID:Lgor6t1j0
>>654
おれもVBAでIE操作してクロールとかやってるけど、
趣味程度にプログラムをやってるだけなのでプログラム環境がVBAだけなんだよね
あと、取ってきたデータをそのままExcelに入れ、フィルタやソートを使ってデータ編集できる点も便利だよ
0658デフォルトの名無しさん (ワッチョイ 13d2-HnJS)垢版2017/10/13(金) 16:53:46.60ID:mP5bG6AS0
ExelVBAで、テキストファイルの書き出しをスレッドで行いたいですが、どうにかすれば
可能なものでしょうか?
Yes/Noだけでもいいので教えてください。
0664デフォルトの名無しさん (ワッチョイ 13eb-97Ee)垢版2017/10/13(金) 19:23:32.28ID:BvXBfgEq0
ブラウザからデータを取ってきた後の処理がエクセルだと簡単だからVBA使うんじゃね

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

どれもDOM操作するとかだろうから大して変わらない
自分の得意な言語でやればいいと思う
0672デフォルトの名無しさん (アウアウカー Sad5-EduE)垢版2017/10/14(土) 15:22:42.26ID:+KU804tRa
>>661
スレッドを扱うことはできる。
不安定ですぐ落ちるだけ。
セルを触った途端に落ちると記憶している。
気をつければそこそこ安定してできることもあると思ってる。
Msgboxのボタンを押すようなことなら落ちないと思うけどプロセスでも同じことはできるからメリットを感じない。

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

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

python sqliteとか使う手もあるけど
実現したい事はどの手段でも実現できる
0674デフォルトの名無しさん (ワッチョイ 131e-89ZN)垢版2017/10/14(土) 21:22:12.43ID:/BK34hqS0
ちょっと教えてください。ワークブックに含まれているマクロを起動時に実行する時
ThisWorkbookのWorkbook_Open()
あるいは標準モジュールでもauto_open
のどちらでも出来るような気がするんですけど、全く同じと考えていい?それとも何か違いがあるの?
0688デフォルトの名無しさん (スプッッ Sd73-8plx)垢版2017/10/17(火) 18:54:28.25ID:x5EvbHpMd
APIでフォームに線を書くまで行けました。
フォームに形状入力してFINDで検索して該当した行を右に空になるまで線を書き続けるコードにしました。
最初の一桁の数字は方向。4が左、6
が右という風に指示してます。

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

https://i.imgur.com/FVhURv8.jpg
0689デフォルトの名無しさん (ワッチョイ 199f-mxX+)垢版2017/10/17(火) 20:25:29.97ID:vT3liOjV0
秒単位で記録されてる1日分で数万件の動作ログから、時系列かつ動作種類別の棒グラフ的な物を作りたいんだけど、、、
仮に横棒にするとして一時間単位に別ても3600セルも必要になるわけだけど、こういうのってどうするのが良いの?
0690デフォルトの名無しさん (ワッチョイ 13eb-MeUd)垢版2017/10/17(火) 21:06:12.48ID:T7W1uv5q0
>>689
ピボット
0694デフォルトの名無しさん (ワッチョイ fb8a-BSx0)垢版2017/10/18(水) 12:13:09.98ID:f7VGWmsn0
横棒グラフ的 じゃなくて横棒グラフそのものを作りゃいい
何故セルをグラフとして使うのかの理由が判らんと何ともいえないが
毎秒すべてのデータが必ず必要とも思えんが、間隔変えれば概略にできるし
特異点を知りたい とかなら数値を基準に求めるものだろうし、その部分の
前後をピックアップして表示するようにして なるべく判りやすいものに
するのがグラフ化の目的なんでは
0696デフォルトの名無しさん (アウアウカー Sad5-EduE)垢版2017/10/18(水) 14:36:19.68ID:ra0RBv56a
>>688
試して無いから何とも言えんが、クライアント領域関連か、座標系の違いかな。
GetClientRectとかTwipsPerPixelでググってみる。違ったらごめん。

>>689
説明が分かりにくい。
3600のセルにデータが取れてるならそれを指定すれば良いということになる。
多分、3600セルという多量のデータだから適当な所で折り返してて1時間の00:00秒から59:59秒の流れを持ったまとまりとして認識させることが出来ないとかかな。
良く分からんが各秒の値でプロットする訳じゃ無いわけだし、平均とか取るもんじゃないの?
0697デフォルトの名無しさん (ワッチョイ ddb3-aYWJ)垢版2017/10/19(木) 21:49:18.11ID:7IrXkeDg0
ビットコインの公開APIから値段を取る方法ってありませんかね
パワークエリ使ってたんですがプロトコル障害で使えなくなってしまい....
0700デフォルトの名無しさん (ワッチョイ 7aeb-KyXl)垢版2017/10/20(金) 07:36:34.81ID:wf1d5/480
>>697
公開APIのプロトコル障害なら公開APIでは取れないって事じゃないの?
0701デフォルトの名無しさん (ワッチョイ 7aeb-KyXl)垢版2017/10/20(金) 07:37:08.93ID:wf1d5/480
>>698
ココナラで買え
0704デフォルトの名無しさん (ワッチョイ d680-gbX+)垢版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 が、同じフォルダ内にある場合は、
変換できずにエラーになるかも
0705デフォルトの名無しさん (オッペケ Sr85-2MXH)垢版2017/10/20(金) 12:21:32.47ID:GcA5ZrMsr
パワーシェル面倒くさw
0710デフォルトの名無しさん (ワッチョイ cee7-bcII)垢版2017/10/21(土) 00:29:32.54ID:YcOLTnbA0
explorerのアドレス欄にcmd入れて
ren *.mp4 *_ou.mp4
とかじゃなかったっけ
0711デフォルトの名無しさん (ワッチョイ cee7-bcII)垢版2017/10/21(土) 01:08:37.57ID:YcOLTnbA0
制約があったか じゃ3行で
ren *_ou.mp4 *._oump4
ren *.mp4 *_ou.mp4
ren *._oump4 *_ou.mp4
0712デフォルトの名無しさん (アウアウカー Sadd-2iY5)垢版2017/10/21(土) 14:00:51.60ID:zr63QsaMa
質問失礼します
あるフォルダ内に数千件のファイルが格納されていて、そのフォルダに新規ファイルが入ってきたときにそのファイルを抽出(ファイル名を取得)したいのですが一番高速に処理を行うにはどうしたらいいでしょうか
0721デフォルトの名無しさん (オッペケ Sr85-37LT)垢版2017/10/21(土) 16:56:56.02ID:Uf1MTp5vr
白雪姫?
0723デフォルトの名無しさん (ワッチョイ 7aeb-KyXl)垢版2017/10/21(土) 19:08:51.19ID:Py32WHo50
>>712
基準となる時点のファイル名一覧をシートに記録しておく
比較時点のファイル名一覧を別のシートに記録する
vlookupとかで同じファイル名があるか調べる
0727デフォルトの名無しさん (ワッチョイ bab3-DBD/)垢版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 になるようにしたいんだけど
0729デフォルトの名無しさん (ワッチョイ 3dea-REa2)垢版2017/10/21(土) 23:00:04.56ID:MeuVmzom0
勝手にインストールできないなら許可貰えば済む話なのにな
業務上必要なら許可降りるだろ
0732デフォルトの名無しさん (ワッチョイ ddb3-0MKJ)垢版2017/10/22(日) 01:10:16.60ID:ZsHOZNag0
それ作って給料もらってる人がこの板にいるわけない。
せいぜいマ板がいいところ。
0733デフォルトの名無しさん (ワッチョイ 9ae3-5n8Z)垢版2017/10/22(日) 01:15:09.08ID:3ymZg3xq0
>>712
ロバストコピーでフォルダのコピー
その際に何を新たにコピーしたのかをログに書き出すオプションを設定しておく
そのログを読みこんで後はお好きに処理
勝手に上書きされたり、勝手に消されてもバックアップ取れてて一石二鳥
0736名無しさん@そうだ選挙に行こう! Go to vote! (ワッチョイ f9f7-lW13)垢版2017/10/22(日) 10:06:24.11ID:ASqT9k9u0
日記

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

どうせ台風でヒマだからちょっとやってみるか
0738名無しさん@そうだ選挙に行こう! Go to vote! (ワッチョイ baa4-V3Kl)垢版2017/10/22(日) 19:16:04.56ID:bE/NxZx30
>>737
自己紹介ですか加齢臭ジジイさん
0740デフォルトの名無しさん (ワッチョイ 5103-2MXH)垢版2017/10/22(日) 22:49:10.62ID:Nb0y5KGU0
突然のヒマシジイvs加齢臭ジジイ対決w
0741デフォルトの名無しさん (スップ Sd9a-2TS2)垢版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

列の転記開始。
0742デフォルトの名無しさん (ワッチョイ fa1e-U5aN)垢版2017/10/23(月) 19:29:34.06ID:hFeDPnm20
自分で勝手に名前を定義すんのやめれ。
それはシートじゃなくブックだろ

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

他にもReadDirectoryChangesWを使った外人のサンプルは動いた。
けど、スレッド作ってるから危険なコードだね。
分かってる人が使う分には良いのかも知れないけどスレッド作らない方法を模索した方が良いんじゃないかなあ。
0751デフォルトの名無しさん (ワッチョイ 7aeb-KyXl)垢版2017/10/24(火) 07:57:40.89ID:PJuVne9A0
>>747
タスクスケジューラで定期的に調べるコードを動かす
0754デフォルトの名無しさん (スッップ Sd9a-9NUR)垢版2017/10/24(火) 08:51:30.78ID:wGosvaz7d
アンケート入力してもらった内容を別シートのA1セルから下に書き込んでいく仕様です。そして、それが共有ファイルだとします。
共有の場合、同時にA1セルに書き込む可能性があります。
既に書き込みされていた場合、一つ下のセルに書き込むようにしてエラーを回避したいです。
どうしたら良いでしょうか
0756デフォルトの名無しさん (ワッチョイ 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
0757デフォルトの名無しさん (ササクッテロロ Sp85-KyXl)垢版2017/10/24(火) 12:21:39.09ID:SXPDSp16p
>>754
webアプリにする
0758デフォルトの名無しさん (ササクッテロロ Sp85-KyXl)垢版2017/10/24(火) 12:26:01.19ID:SXPDSp16p
>>754
データを格納するファイルと
そのデータを管理するファイルに分ける

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

DBとDBMSのような関係
0759デフォルトの名無しさん (ササクッテロロ Sp85-KyXl)垢版2017/10/24(火) 12:29:03.80ID:SXPDSp16p
>>756
マクロの記録でオートフィルタの記録をとって見比べる
0762デフォルトの名無しさん (ワッチョイ ddb3-hp5j)垢版2017/10/24(火) 14:18:38.15ID:wq0WCN150
c#とか使わなくてもvbsでフォルダ監視するファイル作って実行させとけばいけるんじゃない?
c#かvb.net使っていいならFileSystemWatcher使えば希望通りのことが出来ると思います。
0767デフォルトの名無しさん (ワッチョイ f9cc-AYzn)垢版2017/10/24(火) 16:13:02.09ID:dMhREPrI0
Book1 Sheetあ Sheetい Sheetう Sheetえ
Book1 の Sheetう の中にボタンを作って、そのボタンを押すとエクセルの任意のブックを参照して
参照したブックのSheet1の内容をすべてコピーして、Book1の Sheetあ のA1を起点に張り付けたいです。
ご教授お願いします
0770デフォルトの名無しさん (ワッチョイ f9cc-AYzn)垢版2017/10/24(火) 16:28:26.33ID:dMhREPrI0
>>769
その都度変わります。
ですのでファイルを参照するウィンドウを開いて指定する方法ができると嬉しいです
0771デフォルトの名無しさん (アウアウエー Sa22-l25D)垢版2017/10/24(火) 17:46:03.13ID:B2D33UKaa
それ自体は難しくないと思います。
あとは、コピー元のブックがあるフォルダが決まってるかとかで多少変わってくるかと。
例えば常にカレントフォルダにあるとか、コピー先のブックと同じとか。
0773デフォルトの名無しさん (ワッチョイ ddb3-hp5j)垢版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"
0775デフォルトの名無しさん (ワッチョイ d680-gbX+)垢版2017/10/24(火) 23:00:43.39ID:DfsEXCLh0
タスクランナーのGulp, Grunt, Jenkins とかを使えば?

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

タスクランナー → アプリ

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

エラー処理も、難しい
0776デフォルトの名無しさん (ワッチョイ 7aeb-KyXl)垢版2017/10/24(火) 23:04:46.31ID:PJuVne9A0
タスクスケジューラでいいように思うけど
0780デフォルトの名無しさん (ワッチョイ 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です。
0781デフォルトの名無しさん (ワッチョイ 3a0e-HarP)垢版2017/10/25(水) 16:21:09.87ID:Qf3oRisb0
ちょっとお知恵を拝借したいと

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

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

数十から百程度のシートがあるので、10000行500列のような数を処理するのは時間がかかるため、
できる限りチェックは最小圏で済ませたいのですが、いい方法はありませんでしょうか。
0782デフォルトの名無しさん (ワッチョイ 7af2-aYWJ)垢版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"/>
みたいな感じでどの行、列が非表示なのか書いてあるからそれを拾うとかどうよ
0784デフォルトの名無しさん (ワッチョイ bab3-DBD/)垢版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
をそれぞれ列数・行数分
0785デフォルトの名無しさん (ワッチョイ 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あたりはよく分かってない部分があるので、自分の認識不足かも知れませんが。
0786デフォルトの名無しさん (ワッチョイ 3a0e-HarP)垢版2017/10/25(水) 17:27:57.53ID:Qf3oRisb0
>>784
(VBAに目が囚われて、非表示検査のことをすっかり忘れてた)
こちらは、あとでいじってみます。
そんな便利機能があったのか…
0788デフォルトの名無しさん (ワッチョイ bab3-DBD/)垢版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だってさ
0791デフォルトの名無しさん (アウアウカー Sadd-2iY5)垢版2017/10/25(水) 19:52:49.91ID:vc+eFbWaa
そりゃライブラリ揃ってるC#でやりゃ簡単なのはわかってる。
VBAでなんとか出来ないか?ってのが醍醐味でしょ
0792デフォルトの名無しさん (ワッチョイ 5103-PvcH)垢版2017/10/25(水) 20:04:16.54ID:1SuU76Ul0
このキモさ只者じゃない
0793デフォルトの名無しさん (ワッチョイ baa4-V3Kl)垢版2017/10/25(水) 20:28:12.47ID:uuTKo/W80
>>790
PowerShellには違和感ありまくり。なんか「覚えよう」と言う気になれない。どうせならC#を統合して欲しかった。
0795デフォルトの名無しさん (ワッチョイ bab3-DBD/)垢版2017/10/25(水) 21:57:34.79ID:0GYD+24d0
Excel起動中だけフォルダ監視したい状況ってどういうケース?
それなりの信頼性が必要なら稼働監視も必要になってくる

VBAでやるならわざわざwin32使うより
新旧状態比較のほうがまだいい気がするけどね
0800デフォルトの名無しさん (ドコグロ MM3d-DDuF)垢版2017/10/26(木) 07:06:29.21ID:oyaJ8gC3M
>>795
> Excel起動中だけフォルダ監視したい状況ってどういうケース?
> それなりの信頼性が必要なら稼働監視も必要になってくる
醍醐味とか言ってる奴に実用性求めてどうするよ w

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


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

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

ただ、そもそもフォルダ監視が本当に必要なのかは疑問。
初心者の質問は結構、無理を通そうというものが多く、仕様を見直すとそんな機能は必要無かったとなることも多い。
0804デフォルトの名無しさん (ワッチョイ eb81-YYNr)垢版2017/10/26(木) 13:02:27.20ID:PA9kc1XX0
初歩的な質問ですが、コードを記入して間違ったときに記入するときに削除をすると
通常の削除ではなく、そのスペースがなくなり上書きのようなものになり
直そうとするとそこから全ての文を打ち込みし直さないといけない状態ですが
通常の文のように削除、追加するようにはどうしたらいいでしょうか?
0806デフォルトの名無しさん (ワッチョイ eb81-YYNr)垢版2017/10/26(木) 13:13:32.91ID:PA9kc1XX0
>>805
雑談スレでもなく、質問スレでそんなにキャンキャン切れるのはプログラミング
向いてないからやめたら?
0809デフォルトの名無しさん (アウアウカー Saed-AR4r)垢版2017/10/26(木) 14:17:19.57ID:rDx4+zqZa
>>804
>>805の言ってることは厳しいし、説明の上手い下手がセンスに直結してるとは思わないけど、初心者の人は説明が下手で回答を遠ざける人が非常に多い。
少しは文章を推敲すべきじゃないかな。
相手のエスパーを期待するってのは結局人にやらせたいってだけと受け取る人もいるだろう。

テキト−に考えてるのか分からないけど、自分の問題となってるコードをそのまま質問者に丸投げしたり、やる気が感じられないんだよね。
0811デフォルトの名無しさん (スプッッ Sd73-Gmo/)垢版2017/10/26(木) 14:36:54.90ID:3HeaIUwTd
こういうおかしな日本語を見ると漠然とした不安を感じる
現象としては>>808だと思うけど
0814デフォルトの名無しさん (ワッチョイ 8903-/3V2)垢版2017/10/26(木) 16:54:30.02ID:FgkSJLUp0
このスレは自分が答えられない質問をする奴は基本貶す方針で運営されてるからな
0815デフォルトの名無しさん (ワッチョイ 13eb-Rdnx)垢版2017/10/26(木) 17:12:20.63ID:Jtc4NubG0
>>814
その方針とやらに従うかどうか
決めているのは自分だろ

勝手に答えてやればいい
0817デフォルトの名無しさん (ワッチョイ 131e-Eec1)垢版2017/10/26(木) 19:44:24.92ID:LTZyjypE0
>自分の問題となってるコードをそのまま質問者に丸投げしたり、やる気が感じられないんだよね。

まだ良いほうだよ、それ。w
とにかくコードも示さずエラーがエラーがってどんなエラーが出てるのかも示さずな奴も居たからな
0824デフォルトの名無しさん (アークセー Sx9d-C+wd)垢版2017/10/26(木) 23:05:18.78ID:n0QyVGSVx
>>819
エクセルブックをまとめると一口で言っても、シートを一つのブックにまとめたり、データを一つのテーブルにまとめたり、いろんな解釈が成り立ちうる
というか、エクセルブックをまとめるというのは、何らかの作業目的を達成するための手段だろう?
初心者は自分でイメージしている手段の実装方法を質問するんじゃなくて、目的から説明して最適な方法を質問した方が良いぞ
0827デフォルトの名無しさん (ワッチョイ 8903-xLv1)垢版2017/10/27(金) 00:53:12.33ID:7fFHnBnT0
あのクソめんどくせえバワーシェルでワンライナーとか正気の沙汰とは思えんな
0834デフォルトの名無しさん (ワッチョイ 8903-/3V2)垢版2017/10/27(金) 19:50:55.26ID:7fFHnBnT0
男のくせにティンコとかぼかして言うやつw
0837デフォルトの名無しさん (ワッチョイ 139b-0mx0)垢版2017/10/27(金) 21:52:19.37ID:9goOwbvB0
VBAでサジェスト機能?をやりたいのですが、フォームにコンボボックス1を配置してシート1のA列にあるリストを一文字入力したらコンボボックスに候補が出るようにするコードが知りたいです。

欲を言えば、『田』と入力したら『田中』、『田口』とか『田』の候補が出てきて田中を選択して、スペースを入力してまた『鈴』と入力したら『鈴木』や、『鈴鹿』とまた候補出てきて入力出来るように出来ますか?
0840デフォルトの名無しさん (ワッチョイ 8903-xjBH)垢版2017/10/28(土) 00:40:19.22ID:W70mY4tC0
>>838
大久保さんかよwお前BBAだろw
0842デフォルトの名無しさん (ワッチョイ 1b2d-xXVv)垢版2017/10/28(土) 09:33:46.66ID:lFHzdqsq0
リモートデスクトップを使用してADサーバへアクセスし
変更するマクロを作成しています。

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

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

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

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

よろしくお願いします。
0845デフォルトの名無しさん (ワッチョイ 13eb-Rdnx)垢版2017/10/28(土) 10:55:53.23ID:nxEBBv600
>>844
ADって何?
0846デフォルトの名無しさん (ワッチョイ 41b3-Eec1)垢版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に入ってるんだっけか?
0849デフォルトの名無しさん (ワッチョイ 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
0852デフォルトの名無しさん (ワッチョイ eb81-YYNr)垢版2017/10/28(土) 12:41:37.08ID:av9I5Dpn0
実行時エラー9
インデックスが有効範囲にありません。
とでます。
で、デバックをおすと該当部分が黄色くなります。
シート名は変更していません。
0853デフォルトの名無しさん (ワッチョイ eb81-YYNr)垢版2017/10/28(土) 12:58:58.98ID:av9I5Dpn0
〉〉851
なぜかダウンロードした真っ皿なサンプルコードに移し替えたらできました。
シート名も変更せず、シート数も変えてないのに何かが変わっていたみたいです。
0854デフォルトの名無しさん (ワッチョイ 13eb-Rdnx)垢版2017/10/28(土) 13:04:08.97ID:nxEBBv600
>>844
windowsならosの機能でリモート保守機能があるはず
それをpowershellから使えばいい
0857デフォルトの名無しさん (ワッチョイ 53fe-6PR8)垢版2017/10/28(土) 14:12:38.74ID:89ERO7Zx0
>>853
ダウンロードってのがよくわからないけど色んな環境で使い回しているのなら
ExcelのバージョンまたぎでVBAが動かなくなることがある

同じブックを2003→2007→2003とかで使い回すと最後の2003の時だけエラーが出たり
0873デフォルトの名無しさん (ワッチョイ 818a-dVlt)垢版2017/11/02(木) 22:11:24.38ID:xfkuRD420
(1) 計算記号を半角の +,-,*,/,(,) に置き換える
(2) 式の中のパラメータを全て数値に置き換えた文字列を作る
(3) 出来上がった式の先頭に "=" を付ける
(4) 答えを出したいセルに (3)の式を書く

で出来ないか?
0874デフォルトの名無しさん (ワッチョイ 99b3-bzCF)垢版2017/11/02(木) 22:21:25.46ID:ZL7lK7Od0
Dim 式 As string
式 = "(1+2)*3"
Range("D5") = ExecuteExcel4Macro("EVALUATE(" & 式 & ")")

とりあえず、文字列変数の”式”に計算式代入してますが、代入をテキストボックスから代入にすればD5に結果が出ます。
0877デフォルトの名無しさん (ワッチョイ c29b-A9CN)垢版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
0881デフォルトの名無しさん (ワッチョイ c29b-A9CN)垢版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

どれでも同じ答えになるけど、式はバラバラでも答えが出るような物をマクロで書きたい。
0882デフォルトの名無しさん (ワッチョイ 06e9-68jL)垢版2017/11/03(金) 00:56:23.31ID:9+4w5kxK0
>>881
言うのは簡単だけど要件定義をしっかりしないと無限に答えが出るからどうしようもないぞ
Ans=(A1+A2)+A3+A4+A5
Ans=A1+A2+A3+A4+A5*1
なんてのもある
何を省くのかを全部決める必要がある
0885デフォルトの名無しさん (ササクッテロラ Spf1-4J3c)垢版2017/11/03(金) 14:26:57.95ID:kxIRYzimp
>>881
構文解析とか字句解析とかパーサ、レキサとかを勉強したらいいよ
0889デフォルトの名無しさん (ササクッテロラ Spf1-4J3c)垢版2017/11/03(金) 18:05:12.90ID:kxIRYzimp
>>886
横とか縦とかを使いたいって要件があるからじゃね
0892デフォルトの名無しさん (ササクッテロラ Spf1-4J3c)垢版2017/11/03(金) 18:49:35.38ID:kxIRYzimp
>>891
セルに名前つけたくないのかもしれない
0894デフォルトの名無しさん (ワッチョイ c29b-A9CN)垢版2017/11/03(金) 22:42:30.80ID:WzVp0mNm0
>>893
やりたいことは>>877

種類 A

W×H/1000/1000
答え
○○

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

みたいに計算がしたくて、種類によって記号に与えられてる数字を反映して計算。使う計算は、+、-、×、/の4つと括弧。
0895デフォルトの名無しさん (アウアウカー Sa69-OggG)垢版2017/11/04(土) 00:12:34.17ID:Om9HmY4ya
ボタンだけシートに置いてフォーミュラ使ったほうがエクセルでやるメリット活かせそうな気がするが
0896デフォルトの名無しさん (ワッチョイ 469f-r1EQ)垢版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

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

自分が示したコードは最初から変数を%1とかにしたけど、シート上に変数のリストを持たせれば>>864の仕様により近くなるけど、そういうことも含めて自分で工夫出来て欲しい。
0902デフォルトの名無しさん (ワッチョイ 3d03-nsS3)垢版2017/11/04(土) 13:46:26.63ID:oCKjTVzP0
言い訳するなら最初から答えようとすんなカスw
0904デフォルトの名無しさん (スップ Sdc2-A9CN)垢版2017/11/04(土) 14:23:56.33ID:CRrC4P9Kd
種類選択して、行に並ぶ全記号をループ処理でフォーム2のテキストボックスに転記させ計算ボタンをクリックして書いた式を+なりsplitで区切って+なら足し算、-なら引き算って感じでは無理かね?
複数条件が無理そうだけど。()の概念がなければなんとかなるのかね?
0906デフォルトの名無しさん (ワッチョイ 3d03-nsS3)垢版2017/11/04(土) 14:38:17.15ID:oCKjTVzP0
>>905
だから知らんのに答えようとしてスレ荒らすな無能
0915デフォルトの名無しさん (アウアウカー Sa69-r1EQ)垢版2017/11/04(土) 22:45:14.81ID:SLMICp2Ea
>>910
バーカw
これだからレベルの低い癖に難癖つける奴は困るんだ。

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

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

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

はっきり言って>>896はコードを手直しすればかなり有力な案だ。
マクロでやりたいならな。
>>875も有力だ。
マクロでやらないなら。
多少書ける奴ならそんなことはすぐ分かる。
0919デフォルトの名無しさん (ワッチョイ 3d03-nsS3)垢版2017/11/04(土) 23:01:13.23ID:oCKjTVzP0
案の定荒らしとるやん
無能の答えたがりは排除するに限る
0920デフォルトの名無しさん (ワッチョイ 06e9-TOoe)垢版2017/11/04(土) 23:01:26.25ID:9byl7HlM0
>>915
構文解析はちゃんとかければ良いんだけど、めんどくさい+例外が多いからなー
その点を完全にクリアできるなら有力候補だね。俺には無理だわ

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

>>916
中身があるのが見えないのか、勿体無い
0923デフォルトの名無しさん (ワッチョイ 79ea-lboT)垢版2017/11/04(土) 23:25:14.88ID:jkiPwlri0
求められてるのはテクニック自慢知識自慢の回答じゃなくて多少泥臭くても質問者が理解できるような回答だけどな
業務に使うんだとしたらなんか知らんけど動いたじゃ駄目だからな
0924デフォルトの名無しさん (ワッチョイ 82b3-69m6)垢版2017/11/04(土) 23:56:47.77ID:O0AU1SEY0
なんでもExcelでやりたがる病の次は
なんでもマクロでやりたがる病かな

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

>>923
だからこそ考え方を示すべきで、コード作成依頼は駄目だと思う。
>>896なら動かしてみれば質問者も理解出来るだろう。
そんなに難しい部分も無いし。
0926デフォルトの名無しさん (ワッチョイ 42eb-4J3c)垢版2017/11/05(日) 00:03:30.19ID:d3t3AJCT0
sqlでいいじゃない
0929デフォルトの名無しさん (オッペケ Srf1-ApTO)垢版2017/11/05(日) 12:31:57.15ID:RpLSKu2Sr
無能は混乱させる発言をするよりは何も言わない方が上策だという事が分かってない
だからこそ無能なのだが
0935デフォルトの名無しさん (ワッチョイ 79ea-lboT)垢版2017/11/05(日) 13:08:17.40ID:9GsfV+7k0
まぁ一番悪いのはコード依頼する質問者だけどな
0939デフォルトの名無しさん (ワッチョイ c29b-A9CN)垢版2017/11/05(日) 14:05:31.85ID:Go05s/xH0
有効な君たちへ。

Aと入力したら、コンボボックスにadditemでAから始まるキーワード候補を入れ込んで矢印ボタンを押さなくても入ってる候補を自動で全て表示って出来ない?
dropdownって書いても最初の1個しか表示出来ないんだが。
リストビュー使わずコンボボックスのみは無理かね?
0943デフォルトの名無しさん (ワッチョイ 06e9-FqSh)垢版2017/11/05(日) 15:01:02.75ID:2uRc+T650
>>942
写真は辞めてくれ。見るのめんどくさい

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

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

こう言うのが職場の役割の上下関係を
人間的な上下関係と取り違えてパワハラとか問題を起こす
0954デフォルトの名無しさん (ワッチョイ 99b3-4J3c)垢版2017/11/05(日) 17:59:37.33ID:vVdKzVLa0
>>951
たかが一つ教えた気になったら
全部が上だと思うのが間違いだと指摘している
ちゃんと教えてやるから正しく理解しろ
0956デフォルトの名無しさん (ワッチョイ 99b3-4J3c)垢版2017/11/05(日) 18:35:21.91ID:KrEf+qNQ0
>>955
このスレに質問した人も
あなたに教えてほしいとは言ってないだろ
0958デフォルトの名無しさん (ワッチョイ 06e9-2rBW)垢版2017/11/05(日) 19:05:22.65ID:2uRc+T650
>>956
意味がわからない
質問者が回答者を選ぶシステムは無い

まぁ仮にあったとして、俺は>>1>>73>>110>>167>>875>>943
(167-875の間は調べるのがめんどくさくなった)
だけど、そこまで悪い回答者ではない。指名も多数あるだろう。ははは
回答もロクにせずに教室で大暴れしてる誰かとは違う
0960デフォルトの名無しさん (ワッチョイ 62fe-SDBi)垢版2017/11/05(日) 19:08:37.19ID:CWWh4Dmp0
どうみても質問者より回答者の方が多いし回答者同士で質問を奪い合ってる状態
もう自称上級者が「教えさせてください」と頭下げていいレベル

てかお前らの態度次第じゃ質問してやってもいいんだけどどうする?ちゃんと答えられんのか?
0964デフォルトの名無しさん (ワッチョイ 06e9-FqSh)垢版2017/11/05(日) 19:23:35.37ID:2uRc+T650
>>963
「一発」が何の一発か分からんが、立てることは可能
ただ5chになってからの仕様は知らないのでvbaでの回答はできない

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

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

君がここ何か文句を言いたいなら、俺以上に早く正確に回答することだけど、出来るのかな?
0967デフォルトの名無しさん (スップ Sd62-3K0w)垢版2017/11/05(日) 21:29:59.86ID:bjKo+Lyid
>>966
VBAでQiitaに記事を投稿することは可能ですか?
内容は VBAでQiitaに投稿する方法についてです。
0969デフォルトの名無しさん (ワッチョイ 3d03-nsS3)垢版2017/11/05(日) 21:53:05.13ID:eSigvT1a0
>>966
まだ荒してんのかお前w
いいかげんにしろ無能
0970デフォルトの名無しさん (ワッチョイ 469f-r1EQ)垢版2017/11/05(日) 22:22:27.36ID:QPFjkg1+0
何も貢献出来てない者が上から目線とか何の冗談だ。
質問も回答もしないバカ者は完全に荒らしだろ。

どんなに負けたく無いのか知らんが、人のせいにするんじゃなくて技術を持ってない頭の悪さを呪うんだな。
0971デフォルトの名無しさん (ワッチョイ 42eb-4J3c)垢版2017/11/05(日) 22:27:54.74ID:d3t3AJCT0
>>966
またアホな事を
教える側が上とか言ってる事を指してるんだよ
お前は馬鹿すぎて議論にすらならない
0974デフォルトの名無しさん (ワッチョイ ede9-2V/I)垢版2017/11/05(日) 22:44:26.84ID:3e8zsqcY0
プルダウンリストにて
以下のような表があったとして、

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




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

もちろん裏方さんにとってはキーボード必須だろうけど、使う側、数値入れる側にとっちゃあ
タッチじゃないとダメ って時代に突入してんだろな いやはや
0981デフォルトの名無しさん (ワッチョイ 06e9-TOoe)垢版2017/11/06(月) 23:22:43.53ID:QEizFbjJ0
>>974
俺の環境が悪いのか、以下のようなプルダウンが四角にしか見えない
>左のボックスで部署を選んだら右のボックスに該当部署の人のリストが出て、その右に年齢を出したいです。
3つ要素があるように思えるけど、実際はどういう風に実装したいの?ペイントか何かでいいのでイメージ画像を作って欲しい
0983デフォルトの名無しさん (ガックシ 0626-SaAB)垢版2017/11/07(火) 09:39:24.82ID:Hcp28Y5z6
bomなしのutf-8 csv に出力するコードでbom飛ばすときのposition = 3がパラメータが間違っていますとか言われるんやけどなんでか教えてください!
0984デフォルトの名無しさん (スッップ Sd62-3K0w)垢版2017/11/07(火) 10:04:40.57ID:bPltWwMcd
>>983
出力するとき、最初からposition=3ってするの?
0985デフォルトの名無しさん (ガックシ 0626-SaAB)垢版2017/11/07(火) 10:07:49.90ID:Hcp28Y5z6
>>984
.Position = 0
.Type = adTypeBinary
.Position = 3
ってします
0987デフォルトの名無しさん (スッップ Sd62-3K0w)垢版2017/11/07(火) 11:45:09.30ID:bPltWwMcd
>>985
まだ書き込んでなくね?
0990デフォルトの名無しさん (ブーイモ MM6d-HQi/)垢版2017/11/07(火) 12:10:48.56ID:HIMFSvpjM
excel vbaでword文書を印刷したいんだけど
「セクション1の余白が印刷可能なページ範囲の外〜」
っていうアラートが出てしまう

disalertでも出ちゃうんだけど良い方法ないかな?
0994デフォルトの名無しさん (ワッチョイ 4960-hhgm)垢版2017/11/07(火) 22:04:04.44ID:XsevGCV00
>>993
可能です
0995デフォルトの名無しさん (ワッチョイ 82a4-Y3po)垢版2017/11/07(火) 22:20:04.16ID:p6FYpT8v0
>>993
シート操作やセル操作をアドインにすればxlsxでも可能です。

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

「カンマ・セパレーテッド・バリュー」って意味わかんねえのかよこのハゲーっと心の中で絶叫してます。
0996デフォルトの名無しさん (ワッチョイ c21a-7T4N)垢版2017/11/07(火) 22:31:27.81ID:uQ1ioh0V0
>>994 >>995 そうですか・・・。今日は開いたファイルのシートを全然認識してくれなくて、非常に困ってます。
BOOKは開いて閉じる操作ができてるので、大丈夫ですが、中のSheet1を全く選んでくれません。
1000デフォルトの名無しさん (ワッチョイ c21a-7T4N)垢版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を超えています。これ以上書き込みはできません。

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