Excel VBA 質問スレ Part50 [無断転載禁止]©2ch.net
レス数が1000を超えています。これ以上書き込みはできません。
!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 初心者です。お時間がありましたら、アドバイス願います。
「自分のペースでゆったり学ぶ EXCEL VBA」という本を使って
勉強しています。シートを任意の場所にコピーするという項目で、
エラーが出てしまいます。
Sub 納品書シート作成()
ThisWorkbook.Worksheets("納品書").Copy _
After := ThisWorkbook.Worksheets(3)
End Sub
これを実行すると、「修正候補:式」と出て、「After :=」の部分が赤色になります。
何が問題なのでしょうか。よろしければ教えてください。
EXCEL2010を使用しております。 >>4
こっちも2010
そのプロシージャまんまコピーして(勿論「納品書」シートも作って)実行したけど正常終了
念のためワークシート数を2枚にして実行すればエラーになるけどそれはインデックスが有効な範囲にないというエラーで
そちらのエラーにはならない。
一応確認しておくけど、VBEditorの画面で上のデバッグ(D)からコンパイルをしてエラーは無い? >>4
時間がないやつは最初からアドバイスなんて出来ない。読むのめんどくさいだけだからそういう社交辞令は書かないほうが良い
で、2010だけどエラーが出なかった。式はおかしくないはず
Worksheets(3) は、3つめのシートを表す。シートが3つ以下だとエラーが立つが、その場合は「インデックス~」のエラーになる
もし可能ならブックごとアップロードしてほしい >>4
改行のアンダーバーの前にスペース入れ忘れてるとかそんなんは? >5,6,7
ありがとうございます。
デバックというのを試してみましたが、同じような結果になります。
ファイルをアップロードしてみました。Dkeyは1111です。
http://www.dotup.org/uploda/www.dotup.org1351357.xlsx.html >>4>>8
よく分からない。普通にうまくいく(シート「納品書」がなかったからテキトーに作ったけど)
http://i.imgur.com/NeVGWfS.png >>8
マクロを含むファイルは xlsm で保存しないとダメじゃね? >>4
出版社のページでダウンロードしてきたらどうでしょうか?
正誤表は無いみたいですね。 >>8
まず最初にエクスプローラーのツール→フォルダーオプションの
表示タブで”登録されている拡張子は表示しない”のチェック外せ。
んで、拡張子xlsxとxlsmの違いについてVBAのその入門書の最初から読んで
勉強し直せ vbaってpcのスペック関係あるん?
オフィス2010の32ビットでメモリー4gで全てのシートの枠線を一括して色変えろってのをやってるけど
すぐ動作しなくなるんだよね、俺のマクロが可笑しく書いてるだけかな >>14
ある
Excelは割りと最適化してくれるけど、最適化しないとこは猛烈に重い
あと、ヘタにvbaコード書くよりマクロの記録をまるまるコピペしたほうがいい場合も多い たしかに枠線の色はパンチ効いてそうだな、メモリ的に 枠線じゃなくて罫線ね
色に関する機能はとにかく重い どのくらいの大きさのものか、どのくらいの処理から重いと言うのかにもよるけど、
>>14と変わらない環境で5000行50列を縦横別々の判定で罫線引いてセルの背景色を行毎に変えて重要項目に個別に色付けてって処理でも五秒もあれば完了するし、
実務に影響が出るほど遅いって事なら、たぶんUnionでセルをまとめずに一つ一つに処理が発生するような事してるのでは?
処理の順番や組み合わせ次第で装飾的な処理はかなり軽く出来るはず。
GPU並の応答速度をセルに要求するなら知らんけど。 銀行にはデータセンターがあって、機械で文字識別に失敗したものが、処理される
3人の職員が、画像を見ながら、金額を打ち込んで、3人とも同じなら合格
殴り書きの人がいるから。
これは、郵便局でも同じ
スレ違いだけど その銀行のシステムをExcelで作っているのでなければどうでもいいな 点数 人数 名前
10 0
9
8 3 foo bar moge
7 5 piyo poo
…
こういう感じのn行×3列の表があります。
人数は、その点数を取った人数です。 すみません、途中で投稿してしまいました。
点数 人数 名前
10 0
9 1 hoge
8 4 foo bar moge
7 5 piyo poo…
6 9 …
…
こういう感じのn行×3列の表があります。
人数は、1列目の点数を取った人の数です。
人数を上から足していって、初めて10を超えた行より上の行の背景色を変える、ということは、
「条件付き書式」で可能でしょうか? >>22
ここVBAスレだからエクセルのスレで聞いた方がいいのでは。
VBAやってる人間って基本的にエクセルの機能知らなくて、
自分で実装した後にそういう機能がある事知って悶絶するのが普通だし。 >>22
人数の累積が10以上かどうかを示す列を追加したら
こんな感じで出来るんでない?
=OR(AND($D4=0, $D5=1), $D5=0)
D列が累積10以上かどうかの列
0なら10未満、1なら10以上
上の例は5行目に設定した条件付き書式 >>22
俺ならD列には上からの合計人数を出す式を追加して
D列の値が10未満かどうかで条件付き式書式を設定する Sub SetGUID()
'On Error GoTo Err_Check:
Dim ref As Reference
End Sub
でコンパイルエラーが出ました。Referenceをで意義してなとのことです。
Referenceをインポートしなければいけないのでしょうか? >>22
B列に条件付き書式で
=SUM($B$1:$B1)<10
いけるんじゃね。 皆様ありがとうございます。
累積人数の作業列を用意するやり方でできました。 >>29
何で列を追加する必要がある?
一番上のセルを絶対座標にして下のセルの行番号を相対にすれば各行迄の累積人数取れるじゃん。 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 >>35
SaveAsやSaveCopyAsで動かないってことなのかな?
PowerPoint/Excelのバージョンやうまく行かなかった方法とエラー内容書かないとわからないね
正攻法でダメなら新しいExcelブックを作ってコンテンツコピーして保存するとか エクセル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列にフリガナが入力されています。 >>35
取りあえず出来たけど今PC閉じたんで書き込めない。
PC開ける環境までもう少し待ってくれ。
>>37
良さそうなんだけど、1つ教えてくれ。
VPathって何だ?
コードの中に見あたら無いんだが。
tempとVPathの関係はどうなってる?
と書けばミスに気付くんじゃないかな。 ついでに言うと、そもそもvって何よw
stringなのに。 >>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 38できました。ありがとうございます。
サンプルコードコピペで何となく打ってたので変数が違ってました。
それ以外の変数は課題の変数名なので、なぜといわれても。
VBAもなかなか難しい どなたかご存知でしたらご教示ください
ADODBのレコードセットから特定のフィールドを削除するにはどうしたら良いのでしょうか
Set rs = cn.Execute(select * from foo)
rs.Close
rs.Fields.Delete(n)
rs.Open
レコードセットが開いていると Delete メソッドがエラーになるので、いったん Close してから Delete するのですが、再度 Open したときに削除したはずのフィールドが復活してしまいます 起動済みのインターネットエクスプローラを操作する上手い方法ありますか? そら、Recordset 消してるだけだしな 毎回Recordset 消してどうしたいねん っていう
Save せんでええのんか っていう select * なんてせずに使いたい行だけselect するってのはダメなんかい >>45
Save メソッドですか?
Recordset をファイルまたは Stream オブジェクトに保存します。
とMSDNに書いてあるから、やりたいこととは少し違う気がします
とはいえ、削除をコミットしたいという感覚は間違いありません
>>46
>>42のSQLはあくまでサンプルですが、SQL文そのものはインプットなので、編集はできない状態だと考えていただきたいです
その上で結果のレコードセットを編集して出力することを考えています >>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実行時に削除したはずの列が復活してしまいます >>53
> レコードセットから列を削除したいのです
取得しなきゃいいだけだろ...
'1.クエリの実行
> Set rs = cn.Execute("select A,C from foo") >>54
>>49でSQLは編集出来ないということらしい。
なんか、物凄く特殊なことしてるね。
レコード数から2次元配列作って1件ずつ入れてくといった泥臭い方法ぐらいしか無いんかね。 >>53
3貼り付けがAとCだけにすれば2は要らないのでは? 初めからBをselectしなければ良いだけだけど、それが無理なら
張りつけてからB列消せば良いんじゃね >>55
> SQLは編集出来ないということらしい。
ああ、なるほど見落としてたわ
なら俺も泥臭い方法かSQLをパースして特定の列を抜いたSQLを組み立てるとかのトリッキーな方法しか思い付かんわ みなさんレスありがとうございます
>>55
やっぱりそうするしかないのでしょうかね
いったん配列に落とすとセルに貼り付けた時データ型やレコード数なども気にしなきゃならなくなるので、できればレコードセットのままなんとかしたいのですが…
>>57
そうなんだろうけど、CopyFromRecordsetだと全フィールド張り付いてしまいます
ループで1セルずつ貼り付けて行くと、>>55の言うような「泥臭い方法」と変わらなくなってしまいます
>>58
なるほど、レコードセットでどうにかできなければそれが一番いい方法かもしれません
>>60
それも考えましたが、rs2に複製の際にエラーが出てしまいました
今は手元に環境がないので、エラーの内容についてはまたの機会にします
>>61
SQLは select * になるかもしれないし、予想がつきません どういうSQLが来るかも分からないのに特定の列を消す必要があるという事だけは分かるのか 文章の中から下みたいな文字列(URL)だけを削除するにはどうしたら良いんだろか。
http://2ちゃん.com/test/20170123456789
数字の部分がうまく処理できない。 >>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 コンパイルエラー: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 「vba subまたはfunctionが定義されていません」で検索! マクロにパスワードかけてたのだが、どうも破られてるらしき兆候があって
ぐぐった結果見つけたこのページの「マクロのパスワードを解除するマクロ」
を試したらほんまに解除できてびっくり
http://neos21.hatenablog.com/entry/2016/09/30/081709
これで破られない対策って誰かご存じないですかね?
自分で根ほり葉ほり動作調べてたら一日かかりそう てか破り方誰でもわかるセキュリティなんて何もしてねえのと同じだ
目からウ●コが落ちた >>66
・1行の文を途中で改行する際の末尾アンダーバー( _ )を付け忘れている。
・Optional を付けたらそれ以降の引数もすべてOptional じゃないといけない >>68
ない
MSですら公式に「間違って変更しないためのパスワードであり、セキュリティ云々ではない」と言ってる
ソースはどっか行った 「ない」ってあんたそんなズバリと(^ ^;
APIのエキスパートなら自分でどうとでもするだろうけど
人に聞いて知ってるような方法はないってことですね
しょーがないか >>68
パスワードの文字数を多くするとか
記号を使うとか文字の種類を多くする そういう問題じゃないんで・・
パスワードを解析するんじゃなく、記録してるとこからそれ自体引っ張り出して
解除させちゃうマクロらしいから、パスワードの複雑さ関係がないんで まず使い方が間違ってる
Excelのパスワードの目的は秘密を守るためじゃなくて、
素人がマクロやシートをうっかり改変して業務に支障を来すのを防ぐのが目的と言われてる
簡単に破れる方法であっても、意図的な操作がなければ破られることはないんで、目的は達成できている まあパスワードかけるなら出来合いじゃなくて
プログラマのハシクレなら自分でそんくらい作れってことかね
他人をあてにするもんじゃないっすね 一体どういう目的でパスワードかけるんだろう。実装をどうしても隠したいとかでなけりゃ破られても構わんだろ。 社内で使ってるけど皆が改変して収拾がつかなくなって管理出来なくなるのを防ぐとかだったな。
前に見たパスワード掛けてたとこは。 MSの公式見解だとパスワードはワークグループを分けて誤操作を防ぐ為のものであって、セキュリティ性は無いとされているね。
一応、VBAはバイナリファイルを読み書き出来るから、自分で暗号化技術調べてAES的な暗号化ファイルとか生成出来るぞ。
でも苦労して実装しても運用する奴らが素人だと暗号化した意味が無くなるから作り損だぞ。 ソフト名忘れたけどVectorにあるExcelアドインで>>68の手法が失敗するやつあったな >>83
しかし、LibreOfficeのCalcからならあっさり見えてしまうんだな。
見えるからコピペし放題 >>83
ほおそれは興味深いですねえ
探してみます >>85
そんなんで解決できるなら誰も苦労せんわ
「何もやってないのに勝手におかしくなった」は聞き飽きた 「何もやってないのに勝手におかしくなった」
これ一番イラッと来るよな
「パソコンが壊れたー(フリーズしてるだけ)」
とか。 「改変したい点がある。自分でやるのでパスワードを教えてください。」と
直球で要望が来たらどうするの? チーム開発でも修正ルールがあるし
会社のシステムを書き換えるには上司の許可いるだろ >>89
そいつ用にパスワード外して送ればいいんじゃね
もちろん改変後の質問は受けない >>89
普通の会社では許可しない
規定のフォーマットで要望書をシステム課に出せ >>91
vbaには無い。
こういうのは一般事務の女の子向けに男がヘラヘラ書いたもの、ってかvbaが安易に書き換えられる仕様は常識
会社の基幹システムはもちろん無理だけどね
変更許可は絶対に降りない。然るべき手続きが必要 >>94
基幹に近い所でVBAが動いてるうちの会社みたいなところもあるんやで
一部上場でテレビCMもガンガン流してて誰でも知ってる大企業
入力ミスをなくすためにワークシートにロックかけて入力から印刷までフォームなしのVBAで組んである
モッサリでめっちゃ使いにくいシステムで見積書とか作らされてる
下っ端の俺にはどうしようもない >>95
世間知らずでスマンかった…
ご愁傷様なのだ 売り上げ金額が合わなかったので勝手に書き換えておきましたとかやってんのか? 知らない人がいつの間にか勝手に書き換えてましたじゃ駄目だろ >>97
それ現場、現場の人間はマクロを触る能力なんかない
現場では調整用貯金箱とか作って、金が多かった日は貯金、少なかった日はそこから取り崩しとかやる 後は、客はパスワード解除しないだろう、出来ないだろうという前提でパスワード掛けてたことも有ったな。
客の別の部署の奴がプログラムの仕組みが見れては困るという要望に対して。
そういう案件の場合はExcelでやらずにちゃんとシステム組むべきという俺の指摘は営業的事情により却下されたな。
客がそんなに金使いたく無いんだとよ。 >>94
それやって収拾がつかなくなって、ちゃんと管理しましょうという話になってパスワード掛けることになる。 Range("J5:J12").Value = "AVERAGE (RC[-7]:RC[-2])"
これどういう意味ですか? エクセル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
元の値は半角カタカナで別の名前が各セルの記入されています。
矢印の個所が参考書を元に記述しました。 >>103
こうじゃないの?
Range("J5:J12").FormulaR1C1 = "=AVERAGE(RC[-7]:RC[-2])"
範囲上のセルに数式を入力する >>105
何が分からんのか具体的に
後多分コードが間違っている
Sub a()
For Each target In Range("C2:C6")
'セルの値をすべて全角に置換して変数tempに代入する。変換する文字列は、Valueプロパティを使って取得する
temp = StrConv(target.Value, vbUpperCase)
'置換後の値の全角スペースを半角スペースに変換し、元のセルに入力する
target.Value = temp
Next
End Sub >>104
右辺は単なる文字列です
セルにそういう「数式みたいな」文字列が入るだけ というか、どうしても解除されたくなかったらxllアドインとかにすべきでしょ。 >>107
ああ、それ俺も買ったけど良かったよ。VBEを開こうとすると途端にエラーが出るので
大抵は諦めるね。俺はそれに加えてvbeのフォントを白にして嫁ないようにした。 >>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 >>115
1セルずつループして処理すればtempを配列にする必要なんてない
どうでもいいけど、全角はvbWideじゃないのかね
全角スペースを半角にするのはReplaceあたり使えば良いんじゃね
課題ならその課題出した奴に聞けよと思うが >>115
速度稼ぐために配列にしてるなら読み出し側もやるべき >>116-117
うん
送信押して、あっと思った
しかも縦方向だと2次元配列じゃないとだめだったっけ?
>>105
ごめん
多分>>110が正解
課題と質問の意図がよくわからないけど >>105
矢印の業務が空行の状態が問題文、矢印の行は君が書いた、と解釈した。
矢印1行目は、vbuppercaseじゃなくて、vbwide。uppercaseは大文字だ。
2行目は、target=temp
そういう問題じゃないようだが、高速化するなら、
Rangeを配列に代入
配列内で計算
配列をrangeに書き戻し
する。 >>119
(誤)矢印の業務
(正)矢印の行
スマン なんで君らは
>置換後の値の全角スペースを半角スペースに変換し
は放置なの? >>121
質問の仕方が悪いから、だな。
では>>119の2行目を
target=replace(temp, "◻︎", " ")
# ◻︎は全角スペースと読んでくれ
に変更。 target=replace(temp, "全角スペースと読んでくれ", " ") 3万行前後ある列のデータの隣セルに、別シート5000行前後の列から、if条件に該当したものをループで貼り付ける処理をしているけど処理が遅い
3万行の列が外側ループi、5000行の列が内側ループjで回してる
処理時間短縮の為に、最初にiとjのデータを配列で取得して比較を行い
該当するものをセルに出力するように変更した結果、配列使用前より処理時間が短くなった
もっと処理時間を早くするにはどうすればいいかお知恵をください >>124
5000がユニークデータなら
コレクション >>124
別シート5000をディクショナリーに放り込んで、引いてくれば良いんでない?その手の話で高速化したいなら二重ループはナンセンス。 >>124
条件と出力形式が分からないからハッキリとは言えないけど、
もし該当したものを都度吐き出しているなら、結果自体を配列にして最後に吐き出す様に直すと早くなるはず。 >>124
ここに載ってるDOUBLE TRUE VLOOKUPを試してみてよ
lookupの時間だけ比較してもDictionaryより速いらしいんだが
http://analystcave.com/excel-vlookup-vs-index-match-vs-sql-performance/
アルゴリズムだけ考えたらバイナリサーチより
ハッシュテーブルのほうが速そうなもんだけどな >>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
ありがとうございます!
これは普通のキーワードでネットで調べてもヒットした記憶がないワードです
今後に活用させていただきます ハッシュテーブルはハッシュの算出方法で変わるからな
対象データに対して衝突が少なくて計算の軽いハッシュ関数じゃないと >>129
配列とセルは相互に直接的なやりとりが出来るんで調べてみて。
いちいちループ回さなくていいから。
簡単に言えば
Dim A As Variant
A = Range(範囲).Cells
とすれば配列Aに範囲の中身が入り、
Range(範囲) = A
とすれば配列Aの中身が範囲に入る。 ネットでエクセルVBAを勉強中なんですがオススメ参考本とかないでか?
特にユーザーフォームを使って作業が多いです。 >>124
条件の内容にもよるけど、ワークシート関数のvlookupは使えないの? >>133
横からすまん。試してみりゃいいんだろうけど...
vlookup(ワークシート関数)って、マクロから使うメリットがあるほど速いの? >>134
試せよw
って言いたけど昔試験したから教えるわ
実はvlookupは参照範囲を広くしなければかなり早い
ただ2003の頃の話だから、今はどうかしらん たかがソフト買うのに個人情報を洗いざらい要求してくるセキュリティ企業って・・・
なんで俺の住所や電話番号がいるんだよ。なんに使う気だ
しかもダウンロードしようとしたら送ってきたパスワード
そっくりコピペなのにエラー出るじゃねえか
大丈夫かここ 会社紹介を見る限りまともじゃなさそう
ツールの中身も海外フォーラムに載ってるソースコピペしてたりしてな 標準のワークシート関数ってVBAで作ってある上に、色々な目的に使えるように冗長性があるから、
目的に対して最も効率的な処理方法であるという条件下だと処理時間は必ず
ワークシート関数 ≧ VBAマクロ
が成り立つ。
特にVLookupとかはセル毎に走査してるから共有可能な部分も個別に計算してるんで効率面はお察し。
ただしワークシート関数とほぼ同じ機能をVBAマクロで実装するのが時間の無駄って事もあるので、
マクロ内でワークシート関数を利用するという状況を考えるのは難しくない。 >>136
ありがとう。
なんか>>139の言う(汎用|冗長)性による低速処理の懸念があって、あまりワークシート関数を使う事考えないんだよね。 お前らが書いた腐ったvbaコードよりワークシート関数が遅いとかw
どんだけ頭がお花畑なんだよw ワークシート関数は条件さえ整えばマルチスレッドで動くぞ
確実にVBAより早いわ https://msdn.microsoft.com/ja-jp/library/office/bb687899.aspx
公式ページ↑見ると2007からマルチスレッディングになってるらしいけど、
経験上、同じ様な目的の実装で処理時間が
VBAマクロ > ワークシート関数
になった事がないんだよな。
十分に最適化されたVBAマクロよりもワークシート関数の方が処理が早くなるって状況の具体例があれば参考になるんだけど、
そもそも目的が違うのもあってワークシート関数が重いからユーザー定義関数を作りましょうみたいなページしか見当たらない。 >>141,142
例えば、>>124の質問内容を試しに書いて動かしてみたら、90msecで終わった。これを「vlookup使えばもっと早くなる」と言われても、「別にこれ以上早くなくていいし」って感じ。 例えばこんな感じ?
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(職場のクソマシン)だから、また今は違うのかもしれないけど。 >>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の方はヒットしない数字があるとエラー吐く。
もっとフェアなデータでやれば話は違ってくるかもしれないけど、この例だとワークシート関数の方が遅いね。 おまえら>>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++使って最適化してるから >>147
なるほどー
これは速い
勉強になった
>>124
余談だけど、こんなやり方もどうぞ
コード量は少なさなら一番
速度は>>147の方が速かったけど
Range("A1:A30000")="vlookup(Sheet!A1,Sheet2!A:A,1,false"
Range("A1:A30000").value=Range("A1:A30000").value
2行目は式を消してる >>149
ごめん、いろいろとおかしかった
Range("B1:B30000")="vlookup(Sheet1!A1,Sheet2!A:A,1,false"
Range("B1:B30000").value=Range("B1:B30000").value ほんとグダグダで申し訳ない
しばらくROMります…
Range("B1:B30000")="=vlookup(Sheet1!A1,Sheet2!A:A,1,false"
Range("B1:B30000").value=Range("B1:B30000").value >>147
あー
> b = Sheet2.Range("A1:A5000").Value
でvalue(のみ)を配列につっこめるんか、あー
ありがとう(・ω・)ノ >>124で処理時間高速化の質問させてもらった者です
>>131
ありがとうございます!
このスレの内容にあるようにセルを配列に入れてから、if文は配列同士で比較して、結果も配列で取得するように修正しました
配列の値を、一度にセル範囲に出力するコードに修正したら8分前後かかっていた処理が、1分〜2分前後になって、処理時間がめちゃめちゃ早くなって快適になりました
みなさんが言われてるように、VBAでワークシート関数を使用した場合の処理時間は、
おなじみオフィス田中さんのページに、配列をセル範囲に出力するのと同じぐらいの処理時間が高速だと書いてありますね
3万行と比較する列データが、複数シートで複数列だったので、次回同じような処理を作成する時は
VLOOKUP用の一時シートを追加して、3万行の列を一番左の列の検索キーにして、比較列はVLOOKUPで取得する実装をしてみます >>153
分単位はかかり過ぎだと思うなぁ。
データや環境の違いがあるから、純粋に比較はできんだろうが、124の内容を素直に読んでコード書いて動かして見たが、100msecかからんかったよ。
ちな、
3万行のデータを配列1に丸ごと代入
5千行のデータを配列2に丸ごと代入
配列2から辞書を作成
配列1を先頭から順に見て、辞書に存在しない値を消す
3万行データの隣に配列1を丸ごと貼る VBAにも新規参入者がいて20年くらい前の話題が新たになされるのにちょっと感動した Windows10のアップデートでIEオブジェクトの挙動がまた変わったらしい?
データ収集とかしてる人はアップデートしない方がいいかも この期にIEオブジェクトをわざわさ生成するやり方はやめたらいいと思う >>157
EdgeではなくIEの挙動が変わったのか?
にわかには信じかたいが。 あるシートに所属するプロシージャから
自分の所属するシートを参照するにはどうしたらいいのでしょうか?
プロシージャを他のシートにコピペしたら
コードを書き換えなくてもコピペ先のシートを参照するようなコードを
書きたいのですが >>162
シートモジュールは、その中で完結する処理を書く場所なので、
シートを飛び越えた処理を行いたいなら標準モジュールに書くべき。 >>163
いや、むしろシートを飛び越えないでほしいんですが
シートで完結した処理にしたいのでシート名や番号による
シートの指定を排除して、所属するシートのセルを参照したいのですが
検索して調べるとセルを参照する方法としては
シート名を決め打ちする方法ばかりが出てくるので困っているのです Active Sheet とSheet名以外でSheet 特定できるんだっけ? application.callerでチェックボックスの動きの判定をするようにしたらメチャ重いんだが、これなんとかならない? >>162
Sub foo()
Debug.Print Me.Name
End Sub
何故かthisworksheetは存在しない
Meを使う セルはもちろんこんな感じね
Sub foo()
Debug.Print Me.Cells(1, 1)
End Sub >>169
なるほどイベント抑止か。
ありがとう、やってみる >>164
シートモジュールに直書きする場合はSheetsの部分を省略してCellsやRangeから書ける。
シートを指定しない場合の振る舞いが、
標準モジュールではActiveSheet(見えているシート)だったものが、
シートモジュールではそのシートに限定されるという変化をするので併用する場合は注意が必要。 標準モジュールに書いて、対象シートはsetした方がいいと思うけどなぁ >>167
ありがとうございます。
まさに求めていた回答です。Meとは気づきませんでした。 >>169
うへえ。
確かにそれは効果が高いが、それだけでOKとか、どんだけレベル低いんだ?
むしろ速度を意識したプログラム書いてる奴にとってはそれやっても速度なんて変わらんのだが。 >>175
速度はコードによるから〜でOKなどというものじゃない。
別に、意識してコード書かなくても下記の後半部分にあるようなコードになる。
その上で速度を上げようと意識すれば一番最後のようになる。
http://excel-ubara.com/excelvba4/EXCEL228.html それで駄目ならマルチプロセスにする。
適用出来ないことも多いけどな。
objEx1=CreateObject("Excel.Application")
を複数作ってそれぞれに独立した計算をさせる。 >>176
ありがとう、ここまで出来るとは思わなかった
他にも関数で高速化極めてて驚いたわ
良いものを見れた シート作ったりセルに書き込んだりというエクセル側の操作をすると、
その度にイベントが走ることになるから、これを如何に抑えるかってのが重要なんだけど、
最初から全部覚えようとするとパンクする。 どんだけ頑張ってコード書いても、大量の演算は結局ピボットの方が高速なんだよな 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時間ほどで納得行かない遅さなんです >>181
ファイルを上げてくれないか
実際に試してみないと分からん >>181
そのコードの処理を見る限り、早くする方法はいくらでもあるけど、
処理がくっそ遅いMatch関数使って何かやってるんだから処理速度的にはそんなもんじゃないの。 何をするプログラムなのか最初に書いてくれないと、どこを観点に見ればいいかわからない
まあ、とにかくRangeを二重ループで触っちゃイカンよ
つーか、>>124と同じ課題か? >>182
仕事用なんですいません…
>>183
MATCH関数遅いんですか?
元は3万行のシート回してたけどそれも遅かったんでMATCH関数使ったんですが MATCHもmatch_typeに1か-1を指定した時はバイナリサーチだから遅くないよ
0を指定してるとリニアサーチだから件数に比例して遅くなる >>186
駆け出しのマです
>>187
少ない件数なら激早なんですけど多いと影響あるんですね
仕事だから検証に時間さくわけにもいかないけど納得行かないんですよね
連休に試してみますね >>189
上司に聞いてみたら?恒久的に超早くなりそうなんで何時間か遊ばせてもらえませんかって
家でも研究中といえば良い
俺が上司なら、ルーチンワークは最優先で効率化させるけどな 仕事でプログラマやってんなら、それこそ会社に理解があろうがなかろうが検証時間取れないなんて事はないだろう。
どっちにしろ>>124と条件が被ってるんで>>147のtest2を参考に作り直せば速度的にはどうにかなるんじゃないの。 >>172
オブジェクト変数多用は速度低下の一因になるぞ 表示シートのセルA1に『SD11』と入力してからコマンドボタン1を押したらマスターシートのA列をFINDで検索かけて下に一行ずつ表示シートの項目別にそれぞれ転記するにはどうすればいいですか?
検索まで出きるんですが、転記とループのやり方が分かりません。
https://i.imgur.com/Bd3WIPk.jpg
https://i.imgur.com/3IPhNPk.jpg >>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
みたいな形で空白を埋めるようにして。 どっちがマスターシートかすらわからないのは俺だけなのか? >>201
父をたずねて三千里の旅に出るよ...
昆虫記 excel2010使ってます。
apiを使ってアプリケーション外の任意の座標のピクセル情報を監視していますが、視覚的に監視している場所がわからないので、当該場所にbitmapを最前面に描画したいのですが、良い方法はないでしょうか?
あるいは、マウスのカーソルをその位置に描画する。とかも考えています。 >>204
WIndow作ってWM_PAINTで描画(GDI/GDI+)
Excelで直接やらなくてもいい気がするけど >>206
昔、そういうプログラム書いてたな。
CreateCompatibleDCとか。
GDI+はステータスバーの数字を取得する為に使ったことがある。
よくあるウインドウハンドルから取得する方法やUIAutomation使う方法で取得出来なかったんで直接Bitbltかなんかで描画してるとしか思えなかった時に。 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 >>208
pdfは元々バイナリファイル
それをテキストエディタで開けばその画像みたいになる
エディタで開く時のエンコーディングが違えば文字化けの見た目も変わる
postするときになんで変換しないといけないの? >>209
普段のブラウザでpdfを投稿した際のpostデータを解析したらpostしているデータの中でpdfを>>208の画像の形で投稿していたので
excelで投稿する際も自分のpcにあるpdfをテキスト状に?変換してpostするものだと思いました
自分としてもファイルのフルパスだけ指定して投稿できたら楽だとは思うのですが・・・ そしてこれが>>208のマクロでpdfを変換してvbaから投稿した時のpostしているデータです
https://i.imgur.com/0LlxHf3.png
明らかに文字化けの雰囲気が違うこれだと投稿したpdfを開こうとしても「画像データに不足があります」と出てpdfが開けません
postデータは同じツールで表示していますのでvbaでの変換の方法に問題があるのかと思ってます
>>208の画像がこの画像と違ってどういう形式?なのか分かれば調べようもあると思うのですがいかがでしょうか バイナリ変換とか変なことをするからややこしくなっている
データの解析なんてせんでいい
ファイルは素直にファイルのまま扱えばok
http://www.excel.studio-kazu.jp/kw/20140404154224.html
で、ここ見ておもったんだけど、htmlファイル作ってform用意して、submitすればいいだけじゃない?
ファイルが何個もあるとめんどくさいけど >>212
前にそちらのサイトも参考にさせて頂いて、投稿はできたのですがpdfが開けなくて、
送信データももっとひどい文字化けになってしまい諦めてました
https://imgur.com/p1huKGY.jpg
unicodeで送信しているのを調整する必要があると書かれていたのですがそれが原因でしょうか・・・
ちなみに自分の使い方としてはそのサイトのようにグループウェアのキャビネットに投稿する形では無く、
仕事で使っているサイトのフォームで投稿する際に添付ファイルとしてpdfを付けるのが目的なのですが
下の方に書いてあるのはSet objIE = CreateObject("Internetexplorer.Application") 的なIEに直接vbaでsubmitさせるメソッドの事でしょうか?
今のところ、投稿する際にプルダウンや入力フォームで様々な値を入力しなければならなくて、
添付ファイルが無い状態での投稿は問題無く行えるようになったのですが
添付ファイルだけはどうにも壊れてしまうというのが現状なので何とかpdfもこのままpostできないかなぁ・・・というのが現状です
説明が下手で申し訳ないのですがどなたかアドバイス頂けたらと思います セルB4から始めて、右に8列‘’○‘’を順番に書き込んでからB5に下がってまた8列書き込む。それを10行繰り返すにはどういうコードになります? >>214
Forで二重ループ
Cells(5, 2)から始めて必要な列数だけ○を書き込む処理を10行分行うだけ >>215
Cells(5, 2)から始めて→Cells(4, 2)から始めて ネットワーク上のフォルダにファイルを保存する時、
初回時のみ若干保存に時間がかかります。
一度実行したあとにすぐ実行すると、
既にネットワーク接続が確立しているからなのか、比較的早く保存できます。
保存は普通にsaveasで、UNCパスで保存しているのですが、
この初回保存時に時間がかからずに保存できる方法ないでしょうか。 >>214
「セルB4から始めて、右に8列‘’○‘’を順番に書き込んでからB5に下がってまた8列書き込む。それを10行繰り返す」コード。 >>215
>>218
ありがとうございます。頑張ってやってみます。 >>217
VBAの問題じゃなくてネットワークやSMBプロトコルの問題じゃないかなあ。
或いは名前解決問題も含んでいるとか。 >>219
全部"○"なの?
Range(B4:I13).Value="○"
じゃ駄目なの? http://imgur.com/MSCp7vw.jpg
シート2で選択した人の時間データをシート1からシート2の各セルにコピペしたいです
イベントプロシージャで名前変更時にマクロ起動は出来ました
名前検索&シートを跨いだコピペがどうしても出来ないのでご助力下さい >>222
Accessでデータ管理してSQLで取り出すのが一番苦労がないと思うんだが。 >>222
普通にVLOOKUPで引っ張ってくれば
マクロは必要ないのではなかろうか。
どうしてもVBAでやりたいなら
WorksheetFunction.Matchで検索してみよう。
シート間コピペはRangeの前にワークシートオブジェクトを指定すればできます。
範囲でやる場合はValueを書かないとだめです。
Worksheets("シート2").Range("*:*").Value = Worksheets("シート1").Range("*:*").Value
実際には決め打ちじゃなくてCellsで検索結果に応じて可変にすればよいでしょう。 >>221
実際には別シートの値をみて条件付けてYESなら右に一個ずつ値を引っ張りたいだけです。 >>222ですがコピペ記述できました助言ありがとうございました
Sub
Dim ws1 As Worksheet
Dim ws2 As Worksheet
Dim name As String
Dim r As Variant
Set ws1 = Worksheets("シート1")
Set ws2 = Worksheets("シート2")
name = Worksheets("シート2").Range("*").Value
r = Application.WorksheetFunction.Match(name, Worksheets("シート1").Columns("a"), 0)
Application.ScreenUpdating = False
ws1.Activate
ws1.Cells(r, 4).Select
Selection.Resize(1,6).Select
Selection.Copy
ws2.Range("a6:a11").PasteSpecial (xlPasteValues)
Application.ScreenUpdating = True
End Sub
シート切り替え時の画面ちらつきを消すために見よう見まねでScreenUpdatingを入れました
期待通りの動きをしてくれてますがもっと上手い記述を参考程度に教えていただきたいです
VLOOKUPだと直接セルに入力する場合があってその時困るのでVBAでやってみようと思った次第です
ACCESSは諸事情で使えません >>227
まず写真じゃなくてプリントスクリーンで >>226
たぶんマクロ記録を改造しているんだと思いますが
Select、Activateはする必要なく
転記処理は
ws2.Range("a6:f6").Value = ws1.Range(ws1.Cells(r,4),ws1.Cells(r,9)).Value
この1行だけでいけるはず。
=の右辺と左辺が同じ大きさの範囲である必要あり。
範囲は実際のシートのに書き換えてお試しを。 >>228
パソコンのネットがゴミ過ぎてパソコンからは書き込めないんです... >>227
応用シートを変数に突っ込む
WithにRange指定まで突っ込む
RangeをCellsにして列参照を変数にする
オフセットの数値を変数にする
これでループで変数をインクリメントしていけばスッキリしそう。 >>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
設計が腐ってる臭いがするので、小手先直したところで意味ないと思うけど。 >>229
うおおおおおお
その1行だけで動きました
ありがとうございます
マクロ記録ではなくググった記述の真似ですが検索が下手だったみたいです userform2のcaptionをそのままuserform8のcaptionに代入使用しています。
型が一致しませんのエラーが出ます。
先ほどまで問題なく動いていたのですが、突然出るようになりました。
UserForm8.Caption = UserForm2.Caption
や
Dim FormName as string
FormName = UserForm2.Caption
Userform8.Caption = FormName
でもエラーが出てしまいます・・・。 >>234
何でそんなことやってるか知らんけど…
標準モジュールに書いたら動いた
Sub foo()
UserForm1.Caption = UserForm2.Caption
End Sub
とりあえずイミディエイトウィンドウやウオッチ士気で、
UserForm2.Caption
に何が入ってるか見てみたら? 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
こんな感じです。
パソコン見ながら打ったので間違って打ってたらごめんなさい。 >>236
とりあえず>>232以上の回答はないと思うぞ >>232
ありがとうございます。すごい助かります。感謝です! >>235 ありがとうございます。 他のユーザーフォームではできましたので、USERFROM8自体がおかしくなっている?
直前にエクセルが動作停止しました。その際に壊れてしまい、USERFORM8のオブジェクト名を理解できていないようです。
そんなことはありますでしょうか? >>241
さーねぇ。まぁあるかないかならあると思うけど、安易に答えは出さないけど、
どうでもいいマクロならさっさとuserform8消して新しく作り直すほうがいいかもな >>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の後ってカッコ無しでスペースだよね。 >>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使って繰り返しが使えるよね。
まあ、真ん中だけ少し違うから恩恵少ないけど。 >>244
sublimnetextとか使ってみてはどうだろう
コピペするだけであら不思議、自動インデント
https://i.imgur.com/rexlwm0.png
VBEと連携できたら便利なんだけど、残念ながらできない >>245
自動でやるならmougでsmart indenter紹介してたな。
多分連携できるはず。 >>246
うお、こんな便利なもんあったのか
ありがとう早速試してみる >>221
それはテクニック。質問者は
「セルB4から始めて、右に8列‘’○‘’を順番に書き込んでからB5に下がってまた8列書き込む。それを10行繰り返す」方法を訊いている。 >>248
でも二重ループでセルを回すとか、実際にはやらない、というかむしろやっちゃいけないようなこと質問されてもね >>250
やっちゃいけないってなんだよw
foreach in rangeって言いたいんだろうけど、excelは行列の削除があるから二重ループでいいだろう
セルじゃなければforeachでいいけどな 列数 = 8
行数 = 10
Range("B4").Resize(列数, 行数).Value = "○" >>248
初心者は設計に問題がある場合が多いわけで。
真面目に回答してもすったもんだして結局>>221が採用されることも多い。
質問の仕方もダメダメな場合が多いから、回答も段々きつくなる。
>>251
すべきじゃ無いのはむしろセル回す方だと思うが。
配列からの一括挿入にすべきだろ。 問題もクソもこういう場合質問者はループを回したいなど微塵も思ってない
無知ゆえに質問の仕方がぎこちないだけだ
教えたがりならそれくらい察しろよ 二重ループってのもある種のテクニックだから、そのやり方を訊いているのかも知れん。for nextでカウンタiとjを使って...とか。
そうでないなら、例えば、同様の効果を得る処理時間の短い方法を知りたいなどと訊くべし。 >>254
それを察したから>>221を書いたんだろ。
したら>>248の突っ込みが入って今に至ると。
それと初心者の場合、無知なんじゃ無くて自分で色々試してみるということをしないが故ということも多い。
動く結果を欲しがり、動く仕組みを自分のものにしない。
質問でRange("K15:O20")などと出てくるだけでガッカリ。
その範囲は今問題になってるお前の表そのものだろと。
結局貰ったコードそのままコピペして使うんだろうなと想像ついちまう。 「何をどうすればいいのか見当がつかない」というのは根本を理解していないが故だしな。
それにVBAはだいたいネット検索すれば解決策が載ってるんで(凡例が少ないという事はあるけど)、
自分で解決してから「こういう方法以外にどのような解法があるか」と聞いてくるのが一番正常なのかもしれないね。 初心者がいるってことは新規参入者がいるってことなので、考えようによってはありがたいことだ。 つべこべ文句言ってねえでお前らなんかに質問してくれるだけ有り難いと思えよ >>260
内容による
とりあえず内容書いてみればok >>261
B2〜B40までのセルをダブルクリックすると検索ボックスが出てきてE2〜E25までのデータを検索出来るようにしたいです(実際のデータは1500個くらいありますが)
検索ボックスにaと入力するとaを含むデータがリスト化されて出てきて、そのリストをダブルクリックするとBの列にそのデータが貼り付けされる
っていうのを作りたいです
http://imgur.com/gMJqp1I.jpg なんで(R1C1形式じゃなくて)A1形式なんだろうなぁ。あれ(A1形式)って感覚的に分かるの? >>262
とりあえず写真じゃなくスクリーンショットで頼む
モアレになって鬱陶しい
要するにE列を文字列で絞り込んでB列に貼り付けたいってことね
で、考えた
・openイベントでuseformをExcelとは別に動くようにshowする。要するに常時表示させる検索ウィンドウ。モーダルか、モーダレスか忘れた。
・テキストボックスに入力するとB列が次々と変化
1500ぐらいならリアルタイムで変化させても余裕だろう
誰も作って無かったら明日の夜作るよ >>263
分からん。全然分からん。
ただ既存のシートにマクロでclearcontentsする時はA1形式にする事はよくある >>262
GUIいじりはエクセルVBAの守備範囲外だからやめたほうがいい。
リボンを改造して専用のボタンを用意する方法があるので、
そこからフォームを呼び出してツールであるかのように見せるのが限界。 >>265
ありがとうございます
スクショは今は撮れませんが明日できれば撮ります デジカメでモニターを撮影するのだって広義のスクショなんだけど
むしろ初期はカメラをモニターの前に置くしか方法がない場合が大多数だった 変な作り話しなくても、会社とか学校のPCとかで内部データ持ち出せない場合は、
そういう風にするしかないって擁護すればいいんじゃないの。(その場合でも画面の写真撮るのは拙いけど) >>262
B列のダブルクリックとか設計がよろしくないね。
検索ボックスってのはフォームと推測。
B列への入力ってのは検索したリストの中から選択したものを入力ってことと推測。
以下のようなものを作成してみた。
・[アドイン]リボンの[E列データ作成]を押すとE列に10万行のランダムデータ作成
・[アドイン]リボンの[E列から検索]を押すと検索用フォームを表示
・検索用フォームでテキストボックスに入力してEnterキー押下するとリストボックスに検索結果表示
・リストボックスでダブルクリックするとB列に選択されたセルにダブルクリックした文字列を入力
https://pastebin.com/ye8PZecY >>265,267,271,272
みなさんありがとうございました
色々コピペですがおかげで何とか出来ました >>272
設計がよろしくないねwwww
しゃしゃんな無能w
おめーの設計()の方がよっぽどよろしくないわw
煽りじゃなくてマジもんのクソだっつーのそのUI
しかもコードは小学生の初めてのプログラミングレベルだぞお前 ちなみにこんなのが出来ました
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というかプログラミング初めてなので勉強になりました
みなさまありがとう >>276
乙。よー頑張った
こういう報告は嬉しいもんやね >>274
初心者の人?
今回の質問自体が簡単な部類だけど、それでも俺の書いたコードが非難されるようなものかどうかも区別つかないの?
批判にも具体的な指摘が全く無いし。 >>278
以前から居る病気の人だから構わないであげて
VBAのコードが読めないのに何故かこのスレに張り付いてんのよ >>276
そこのサイトのコードだと毎回下記手順になるんだけどそれでOK?
セルダブルクリック
テキストボックス入力
リストボックスダブルクリック
以下繰り返し
間違って別のセルダブルクリックしたらフォーム閉じなきゃならんし、
連続して入力していくならフォームはモードレスにしてリストボックスのダブルクリックで閉じないようにした方が良い。
セルダブルクリックの中の
frm_Kamoku.Show
を
frm_Kamoku.Show vbModeless
に変更して
リストボックスダブルクリックの中の
Unload Me
をコメントアウトするだけ。
フォーム表示中にリストボックスダブルクリックで入力するセルが選択できるようになる。
フォームの終了はxボタンで。 >>278
初心者の人?wwwwwww
いやw初心者はお前だからw
何をどう勘違いしたらこうもマヌケな発言が出来るのかねw
そもそもお前のクズコードなんぞ批評の土台にすら登っとらんわ
のぼせ上がんのもいい加減にしろクズ >>281
例えばね、>>276のリンク先の人のコ−ドを見ればすぐに、そこそこ書けると分かるのよ。
書ける人ってのはコード見ればその人の力量がすぐ分かるもんなんだ。
>>276のリンク先の人がそこそこ以上かどうかは扱っている内容が初心者向けだから分からないけど一定以上のレベルにあることは分かる。
残念だが、君はとっても恥ずかしい人だ。
というかね、煽るだけで具体的な内容が無い。
どこが悪いか全く言及出来てないのが笑える。 こんな華やかなコメントアウトって使う?
'*********:*********:*********:
' このプログラムはaでbです
'*********:*********:*********: >>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 >>283
???
使う人もいるでしょ。
俺も使う時あるし。
こんなのも使うな
' /////////////////////////////////////////////////////////////////////////////////////
' //#名称 Auto_Open
' //
' //#概要 ブックを開いたときの処理(Excelの特殊関数)
' //
' //#引数 なし
' //
' //#戻値 なし
' //
' //#解説
' //
' //#履歴 2017/09/21
' // Coded by Hogeta Hogeo
' //
' ///////////////////////////////////////////////////////////////////////////////////// >>276
>>280に書いた内容だけど、よく考えたらB列以外にも入力されちまうわ。
元々の処理ではフォーム表示で入力セル固定だけど>>280では固定じゃ無くすので。
リストボックスダブルクリックの処理でアクティブセルに入力するようになってると思うけど、>>280を試すならアクティブセルの列がBの時だけ入力するようにしないといかんね。 >>282
朝から笑わせてもらったw
なぜお前らはそこまで勘違い出来るのか?
勘違いこそが教えたがりクンになれる素養なのか?
大体分かってたけどw
まあお前らが勝手に勘違いしてるだけならいいが
他人に嘘を教えようとしたら盛大に告発させてもらうわw >>285
あぁ、そういう風に使うのか、ありがとう >>287
どこが悪いのか指摘出来ないというのが苦しいね。
批判出来るということは悪い所がわかるということの筈なんだけどな。
悪い所が分かる程の能力は無いけど、取りあえず煽ってみましたってところかな。
ところで君は自分の書いたコード晒したこと有るのかね?
君が俺より出来るなら>>204に答えてあげなよ。
>>204の質問って、ここでは高度な内容になる筈だからさ。
ま、無理だろうけど。 >>276です
皆さんありがとうございます
質問なんですが
http://infith.com/system/excel/vba_form_find/
によると
RowSourceに"科目マスタ!A2:A" & wLastGyouを入れないといけなのでしょうか?
プロパティのRowSourceに値を入れようとしてもエラーが出ます >>293
そもそも、どうしてRowSourceにこだわってんの?
君のやりたいことでは必要無いと思ってたんだが。
RowSourceってのは融通が効かないから自分は基本使わないんだが、エラーになってるとしたらRowSourceとAddItemが共存出来ると思ってるとかかな。
RowSourceはシートの指定範囲のデータをリストにするもので、そこに追加やそこから削除は出来ない。
指定範囲のデータだけでリストは完結することになる。
そこでそのリンク先でも絞り込みの前に.RowSource=""を入れてる。 >>293
RowSourceプロパティに事前に値入れてもエラーにはならんよ。
シート名!A1:A10
とか入れてみなよ。
変数は使えないのは分かるよね。
動く前なんだし。 >>292
批判wwwwww
批評の土台にすら登ってないと何度言えばw
自分の無知無能に蓋をして見たいものしか見てないんだよお前らは
勇気を出して一度自分の無能と真剣に向きあってみ?
頭が悪くても少しは世界が変わるから…何も変わらんかもしれんけどなw >>296
何だ、何も言えるだけの技術的要素を持ってない人か。
具体的な指摘も一切出来ないし、わざわざ>>204の話を振ってやっても何をどうすれば良いかも思い付かないんだろう。
ちなみに俺は3〜4パターンは思い付いてる。
例えば、ビットマップ描画じゃなくても透明ウィンドウに円形リージョン使った輪っかウィンドウ表示するとか。
リージョン使わなくても透明ウィンドウだけで同じようなの作るとか。
ま、何言ってるか分からないだろうけど。 >>298
技術的要素wwwwwww
とことん笑わせてくれるなお前w
相手にされてないのに必死にアピールして虚しくならないのかバカという人種はw
これがお前らの大好きな承認欲求ってやつだろw
他人に認められたかったらまず自分の無知無能を自覚しろよ
話はそこからだ、そうすれば少しは周りも認めてくれるんじゃね?
…あ、バカが居る…てなw >>299
小学生でもお前のレベルは低いと言うことは出来る。
本当に自分の方がレベルが上かを示さなくて良いならな。
それがお前だ。
技術的要素無しであの葡萄は酸っぱいと言ってるキツネのようだ。 本当に、何言ってるか理解出来ないから、振った話には一切言及出来ない。
こういう所でレベルが透けるんだよなあ。 もうなりふり構ってられなくなったなw
いいよその調子w 久しぶりにこのスレ戻ってきたけどまた随分荒れてるね。
まぁどんな手法で作った方が良いかなんてそのときのシュチュエーションで決まるものだから
議論してもあまり意味がないと思うよ。
そんなことより変更に対して厳しく、追加に対しては寛容になるような作りにするような
もっと基本的なことを念頭におくようにした方がより効率的に改修出来たりするよ。 まず>>306が質問でも回答でもない時点で何を言っているんだーおまえわー
自分だけは特別だと思ってる自意識過剰かー
単なるバカなのかー >>308
条件に応じて関数を選択してそれのAddressOf値を返すことはできるから
強いて言えばあると言えばあるね >>306
ぁあ?
だったら昔みたいにガッチガチにルールで縛りつけたスレ立ててそこで1人でやれやボケ ルールで縛らないで良いなら質問と回答以外書き込むなと書くこともアリだろ。
アホなこと書いても良いが、その分そいつが批判されるのも仕方ないということ。
アホな初心者がかつて批判されたことを根にもって相手の力量も分からずに噛みついてるんだから批判されても仕方ない。 >>309
すんません、表現が良くなかったです。
mapとかfoldとかfilterとか、それらに付随してラムダ式とかです。
調べたけどなさそうですね。MSさん、用意して欲しいな、、 >>311
VBAみたいに片手間でやるような言語のスレで
初心者って言われてもなぁ >>312
これ見て理解した
http://www.cse.unsw.edu.au/~en1000/haskell/hof.html >>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]とか。 EXCELはシートにSQLが使えるから場合によってはそっちの方が使えるのでは。
LINQやラムダ式でガッツリやりたいのであれば
もうEXCELの範疇を超えているので
.netでentityFreamworkとか使ってやった方がいいと思うよ。 do while not eofと do until eofは同じですか? >>323
同じじゃないと思える根拠を書いてくれないか?doの後じゃなく
Loopの後に条件を書いたらそりゃ違うだろうけど。 >>324
ありがとうございます
同じことでも言い換えられるんですね >>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扱うなら覚えておかないとはまるぞ Notはビット反転だから真偽値以外だと挙動が変わるわな。
Nullは色んな判定を挟む前にFalseを返す仕組みのはずだから、また問題が違うような気もするけど。 >>327
VBAには暗黙の変換ってのがあってな
>Notはビット反転
数値型に対してはな
真偽値にたいしてビット演算は規定されていないはず
>Nullは色んな判定を挟む前にFalseを返す
Nullが常にFalseを返すなら、>>326みたいな事にはならん
Nullには伝播性ってのがあってな、基本的にNullを含む式はNullを返す
返してるのはあくまでNullであって、TrueでもFalseでもない
Do Loopのヘルプにわざわざ
>引数 condition の値が Null 値の場合、引数 condition は偽 (False) であるとみなされます。
ってかいてあるだろ >引数 condition は偽 (False) であるとみなされます。
自分で答えを書いているように思うが。 俺が「Falseを返す」と表現したのが悪かったな。
「Nullが含まれる式は必ずFalseとして判定される」と書かなきゃいけなかった。 関係ないけど Not 1 が False 扱いにならないのは地味に不便だ >>330
それが分かってれば問題はないんだけど、分かってても勘違いしたりするからなぁ
Nullの扱いが直感的じゃないってのが最大の敵
>>331
VBAのTrueは-1だからな
Not -1とかNot CBool(1)とかならFalse扱いだし vbaとExcelで数値とbooleanの変換が変わるのは怖い ハイ戻ってきましたぁ!
また調子こいた教えたがりがしゃしゃってんのか?
バカはどいつだ? >>331
Not 1と書くシーンがわからんが、素直に(?)Not TrueとかFalse とか書けば? ツール→参照設定で全てを参照する方法はありますか? >>314
ここで言われてる初心者ってのは殆どの場合、他の言語も初心者ってことだぞ。
技術的に初心者だから初心者と呼ばれてる訳じゃない。
自分の画面を見ることが出来ない相手にも伝わるように書くとか、条件を小出しにするとか、相手をロボットか何かと勘違いしてるような初心者以前の問題が有るから否定的な意味で初心者と言われてる。
それにVBAを片手間とか簡単に言うのもどうなんかね?
あまり使ったこと無い奴ほどそういうこと言ってるような気がするね。
内容が何ーつ無くて罵倒しか出来ない初心者君の真価が問われてる。 >>341
> 内容が何ーつ無くて罵倒しか出来ない初心者君の真価が問われてる。
ブーメラン w >>339
ワシにとって Not 1はNot true程度には奇抜や Not 1 は普通に使うけど?
LSB だけ変更したい時とか 「Not 1」と直接書くわけじゃなくて0/1を返す関数の返り値に対してのことだろ >>344
うむ、ただ>>331は「Not 1 が False 扱いにならない」事を嘆いて(?)いるから、君とも意見が合わないかも知れない。 >>342
内容あるじゃねーか。
日本語も理解出来ないほど無能か? >>348
スッカスカの内容あるとか言われてもなぁ w >>349
君のレスには内容ないけど、Sa6b-XzByは内容のあるレスをし続けているぞ >>350
し続けてる?
>>348に内容あるとかバカなの? >>349
>>351
バーカ。
>自分の画面を見ることが出来ない相手にも伝わるように書くとか、条件を小出しにするとか
これが内容だ。
クズコードだとかお前の設計の方がよろしくないだとかはどこがどう駄目なのか言ってないから何も言ってないのと同じだ。
この違いも分からないから無能と呼ばれるんだよ。 このバカよっぽど悔しかったんだなw
支離滅裂だけど悔しさだけは痛い程伝わるよ ID:SDtHFGLjaくん
だが俺にバカを嘲笑うのをやめろと言うのは土台無理な話だ
だってバカは面白いんだものw
これくらいはその小さな脳ミソでも理解出来るよね?おバカさんw この罵倒しかしないヤツはVBAコードの一つも読めないのに何年も前から張り付いている本当の意味での異常者で、
どうも現実の生活で誰にも構ってもらえないからネットで罵倒を繰り返してレスポンスをもらって喜んでいるみたいなので、
各員は餌を与えないでください。いつまでも無意味なレスがついて荒れるだけです。
対策として「晒したコードに対し具体的なコードをつけて指摘しているもの以外は相手にしない」っていうテンプレでも追加してほしい。 >>354
ほら、やっぱり内容がまるで無い。
小学生と変わらん。 >>353
スレ見てれば分かるだろ。
>>274
>>281
>>287
>>296
>>299
>>354
どれ見ても内容が皆無。
殆ど無いじゃない。
ゼロ。
相手のどこが悪いのか全く言及出来ない奴は何も言ってないのと同じこと。 >>343
すまん、どっちも始めて見た
1をbooleanにするのはテストでifを書く時だけだな
if 1 then
ってこれ間違ってた事に今気づいたわ。本来なら
if -1 then
だったわ そんなことより、
0以外の数値をTrue扱いしたいのに、
If Not x が IfNot (x)じゃなくて If (Not x) なのが非常によろしくない >>358
いや、
If 0 Then
も
If 1 Then
も想像してる通りに動きますよ。
少し直観と食い違うのは Not が絡むとき >>358
コメントの代わりに
#If 0 Then
は昔よく使ってたなあ。
最近は全く使わなくなった。
Not 1もNot TrueもIf -1 Thenも使ったこと無いな。
こういうのはその人の趣味というか癖みたいな問題だわな。
どれが良いとか悪いとかの問題じゃない。 しかし言うほど
If Not [Integer] Then
という書き方をするだろうか?
If Not Book Is Nothing Then
みたいな書き方はするけど、数値でNot使う事自体あんまりない気がする。 MS系のBASICはずっと昔から「0」と「0以外」で真偽を判定するから、論理式では1もNot 1もありえない
もちろん-1なんかも使わない
俺の知る限り、約40年前に発売されたN-BASICの時代からこの仕様は変わってない >>357
だからいちいち相手するなよ
おまえの内容とやらもたいしたこと言ってないんだし >>359
> If Not x が IfNot (x)じゃなくて If (Not x) なのが非常によろしくない
それ一緒だろ w
C言語みたいに論理否定(!)があればいいだけの話 >>362
数値型にnotは使ったこと無い。特に言語によってfalseが変わるから怖くて使えない
後者は普通に使う >>330
> 「Nullが含まれる式は必ずFalseとして判定される」と書かなきゃいけなかった。
ところがどっこい
If 2 Or Null Then 〜 Else 〜 End If
は True (と言うか整数の2)と評価されたりするんだな
0 Or Null は Null になるとか挙動が読めないけど
@Excel 2013 >>364
俺の書いた回答に対してアホが罵倒したのが最初だよ。
お前の書いた>>344なんて初心者でもやらんわとでも言われたら頭来るだろ。 >>366
True ならわかるけどFalseが0以外の言語ってあったっけ? >>368
単にビット演算の必要がなかっただけなんだろうなとしか思わん
まあ内心でレベルひくって思うけど w >>370
俺はそれなりの奴から根拠ある批判をされた場合は何とも思わん。
びっくりするぐらいレベルの低い奴から根拠の無い批判をされた時は赦さんね。 >>358
だろうな。ワシも書いたの初めてや。そのレベルの奇抜さって事。 isSomeStatusが整数を返す関数のとき
If isSomeStatus(x) Then 〜
を使ってて、つい
If Not isSomeStatus(x) Then 〜
と書いてしまうことはない? >>368
人並みに頭に来てんだおバカさんw
結構結構、もう少し熱くなって一度爆発でもしていまえば少しはクールになるかもねw
お前のちっぽけな脳ミソもw
あ、後もう一つ、お前はもうしゃべるな >>373
> isSomeStatusが整数を返す関数のとき
なら
> If isSomeStatus(x) Then 〜
なんて書かないで
If isSomeStatus(x) <> 0 Then 〜
って書く >>373
無い。つか、そう書かない事を理想としている。
変数も定数もプロシージャも型を意識するようにこころがけている。 使ってるうちに関数の返値型は暗記するし、そもそも一度は確認するだろうから、
真偽値以外でNotをうっかり使うというケースはあんまりなさそう。
というかうっかりNot 整数をやっちゃったぜって事ならイミディエイトウィンドウで確認する癖を付けた方がいいと思う。 組み込みの Is〜 が As Boolean になっているけど
自分の Is〜 は As Long にしたくてそうしてるんだけど、返り値を受けた時の書き方を
統一的に扱えないのが悩みの種なんですよね... >>379
それは(失礼を承知で言えば、)ネーミングにセンスが無い。isほにゃららFunctionはBooleanに統一すべし。 >>380
そうなんだけど...
返り値を合計したものが「〜にあてはまるもの」の数に一致させたいんですよ 同じ関数名で宣言するとユーザー定義関数の方が優先されるはずだから、
いっそ組み込み系のIs〜を全て再定義してしまえばいいのではないだろうか。 もちろん「Isなんちゃら〜」の返り値を合計した後で -1 をかければいいんだけど、
Trueが-1であることに依存するのもなんかこう、しっくりこないんですよね。 >>381
うむ、気持ちはわからないでは無いがそれは駄目だ。関数名cntなんとかとかnumなんとかとか「〜の数を返す」ヤツらルールを決めて統一すべし。 >>383
-1をかける、とかそんな言語仕様に強く依存する(グロテスクな)コーディングはしないほうが良いと思わない? >>380,384
うーん、しょうがない。
これから大改造するか。 >>386
あ
大改造になっちゃうの?それはすまない。
けど、
Function isほにゃらら() As Long
は、やはり美しくないよ。 >>374
小学生に罵倒されれば誰でも頭に来る。
内容が無ければ尚更だ。
それに、小学生はきちんと躾ける主義でね。
バカにはちゃんとバカと言うべきなんだ。
質問に関係無いことしか書かないバカが人に対してここに来るななどと言う資格があるわけ無いだろう。
そんなことも分からないから小学生と呼ばれるんだ。 >>381
Isで始まる名前を変えれば良いと思うのは俺だけ?
或いは戻り値はBooleanだけど引数をもう1つ用意して、そこに合計を返すとか。 >>389
お前小学生にもバカにされてんのかwwww
最近の小学生もすてたもんでもないなw 元の引数の値に合計を入れて返しちゃうのはさすがに変な気がするけど。 >>391
ここまで言われて内容がまるで無いから呆れる。
百害あって一利なしだ。 >>393
お?少しは謙遜の気持ちも芽生えてきたか?w
でもお前は百害どころか毒にも薬にもならんよw
だってバカなんだからw笑えるけどwww 誰か助けてください。
今日一日かけて作ったマクロが、先程エクセルがクラッシュしてしまい自動修復が働き、マクロだけ消失してしまいました。
クラッシュ直後のxlsmファイルをZIPにして「vbaProject.bin」を取り出したりは出来たのですが、
新しいxlsmに取り込んでもやっぱり開くと修復で消えてしまうようで・・・
何とかしてソースコードを取り出すことはできないでしょうか・・。 一日で作れるマクロなら大した分量じゃないだろうしもう一回同じコードを組めば良いんじゃね >>395
こまめに保存しないとそういう目に合うという経験を得られてよかったね
次から気を付けないとね >>397
保存はしてあったんだが、ファイルそのものが破損してた。
定期的にExcel落とさないとダメみたいだね。 >>398
自分はモジュールごと定期的に保存フォルダにドラッグ&ドロップしてる
いちいち「ファイルのエクスポート(E)...」とかしなくてもできることを知って楽になった。 >>398
確かにエクセルは保存をかけても終了するまで保存しないんだよな。たぶんXML形式にして保存する関係からだとは思うけど。
自動バックアップからなら修復の可能性はあるけど、マクロだけ消えたならそのファイル自体は元々マクロ書く前の状態なんじゃないかな。 あはは、俺なんかそんなのしょっちゅうだぜW
ノリノリで良さげなコードが書けてる時に限って突然落ちやがるWW
もうね、マメに保存する癖を付けないとどうにもならないよね >>367
Orのヘルプに書いてある通り
True Or Null はTrue
False Or Null はNull
で、
CBool(2)はTrue
CBool(0)はFalse
なので、仕様通りの動作ではある
Orはどちらかが真なら真なので、片方が不定でも真だという理屈だな
ショートサーキットしないくせにな
どちらかが偽なら、もう片方に従うから、もう片方が不定なら不定
まあ、理屈として考えれば納得はできる >>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)
次レスへ続く >>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
今回のはマメに保存するというより、ブックを別ファイルにバックアップしないと対処できないかな。
今度から毎時間スナップショット撮るようにするわ >>394
よっぽどアホな質問して怒られたのが悔しかったのか?
碌にコードも書けないのに居残ってるってことはw >>400
そうなの?
保存したのにされてないってのは経験無いなあ。
>>399
バックアップするマクロとか書いてたけどウィルス判定されることもあるし、最近はやってないわ。 >>404
列挙の場合、自分はメンバーの先頭にすべてenmを付けてるな。
昔、誰かがこれやってるの見てからは。 ExcelがクラッシュするならWord VBAで書けばいいのに
(半分マジ) >>399
ファイルのエクスポートってのは知ってるけど「モジュールごと」ってのは具体的にどうするんです? スプレッドシートで開いてみるとか
ファイル壊れてたらダメ化 >>341
はっきり言おう
VBA自体が間口が広いために初心者が扱い易い言語ではあるが
大きなシステムやWeb系には向いていないために
全体から見れば「VBAの上級者」というのは
所詮井の中の蛙に過ぎない。
自称VBA上級者よりVBAの上級者じゃなくても
JAVAや.Netの知識を多少なりとも持っていて
そっちも出来るという方が基本的に給料が高いというのはそのせい。
つまりここで初心者がどうのと煽っている奴も
所詮は初心者の域を超えていない。
初心者が初心者を煽ってるだけ。
もっとも俺も自分を初心者じゃないなんてとても
おこがましくて言えないけどね。 >>409
VBEのプロジェクトエクスプローラでモジュール名を右クリ >>409
コードのコピペとか右クリからエクスポート(E)...じゃなくて直接ドラッグ&ドロップするの >>411
自分が初心者なら皆初心者に違いないってかw
賢いふりをしてるけどお前も>>341となんも変わらない無知を知らぬバカやぞwww 403だけど、会社のEXCELでも試してみたらやっぱりクラッシュする
redim aaa(,1 to 2)
まぁコードとしては間違いだから滅多にこんな書き方しないんだけどさ
でも
redim aaa(,1)
なら、ただのエラー(赤字)になるだけでクラッシュしないから納得行かないわ
一応MSには送っておいた。
参考まで。 >>411
JAVAや.netのできる上級者も多いと思うが。
というか、上級者は他の言語もできる奴が多いだろ。
主戦上がどこかというだけだし、そもそも主戦上だって他言語の人もいるだろ。
俺がどうあってもかなわないと思う人はVBA上でアセンブラ使ってるし。
実際、俺も大したレベルじゃないがCやJAVA、.netも書くしアセンブラも勉強中。
VBA使いだからといってレベルが低いわけじゃない。 >>418
正確にはマシン語だね。
VBAとアセンブラでググれば見つかる。
マシン語のコードを変数に格納してメモリ操作して実行させる。
VBAの制限のために普通じゃ出来ないことをしようとする場合や普通に書くとどうしてもスマートじゃない場合に使う。
個人的に使いたい場面が2つ有るけど技術的に自分のものに出来て無いので使ったことは無いが。 俺もマシン語とアセンブラ言語を勉強したなぁ。
早見表片手にバイナリ読むくらいのところまではいけたけど、
実際にメモリに転写して実行するとか手間が多すぎてあきらめたわ。
マシン語もシミュレータでOS作りに挑戦してHello Worldで止まってる。 >>421
VBA上でやる場合はアセンブラが主体じゃなくてVBAで出来ない部分だけに適用するわけだから、アセンブラ自体はそれほど複雑じゃないと思う。
自分の場合は別の言語でmemcmp使ったことがあって、それをVBAに移植する場合に使いたい。
ただ、そのプログラムをVBAで実現する意味が薄いように感じるのと別にmemcmp使わなくても代替あるかもしれないんで実際に組むかどうかは分からないんだけど。 >>423-424
まぁそこまでするなら別の言語にした方がいいというか、そもそも発想が逆というか。
オフィス製品を拡張する上で「守られた」プログラミングが出来るのがVBAの特徴だし、
目的を絞っているから実用的なプログラムを短時間でくみ上げられるという長所があるのであって、
マシン語まで勉強してやるくらいなら、その手の目的で作られたC++言語辺りを頼るべきなんだよな。
もちろんそれが出来ない環境だから俺もマシン語を勉強するに至ったんだけど、
けっきょく型安全すら保証されない世界で何かを組み上げるってのは趣味の世界の話であってVBAの本質からずれてるしね。
ちなみに勉強中にC言語ですらマシン語で直接組むよりも非効率になる可能性が高いと知ったんで学ぶ意味はあったけど。 一体何の話をしているのか?
VBA補完というならC/C++で十二分だろうに
それで「実行環境がVBA」という気軽さは保てるんだし >>424
自分はものにして無いので、そこまでしてない。
ものにしてる人にとってはそこまでしてなどと思ってないと思う。
別言語でdll作ってVBAから呼び出すことも出来るだろうけど、そこだけで完結しないのがスマートさに欠けるように感じるからかな。 >>426
確かに話がとっちらかって分かりにくくなったが、つまりそういう話をしてる。
でもVBA以外の環境を持てない職場なので仕方なくVBAが補完できる範囲だけでやるしかない。
その補完範囲にマシン語を含めるのはVBAの長所を殺しているのでVBAが想定している範囲の中で最善策を練るべきだと。
ちなみに個人的経験では次善の策としてSQLを使ったら地獄を見た。 >>426
正解。
@まず保守性が酷い。都度ハンドアセンブルするのかって話。
Aラベルが付けられないからブランチ命令などは変更があったとき常にアドレスの相対位置を
設定し直さなければならない。ジャンプ命令みたいな絶対アドレス指定の場合はどうすんだろ。
B生産性が皆無
C中間言語を介在していないのでアーキテキクチャが異なるCPUでは使えない。
どうしてもアセンブラで組みたければC++のインラインアセンブラで素直にdllファイル作れって話。
こんなものどうやって普通にVBA組んでるやつに引き継ぐつもりなんだろうな。
出来ない環境でなければ設計自体を見直すか諦めろと。 >>429
引き継ぎとかは別にして、まず楽しいのかと >>427
完結ってどういう意味?
「VBA アセンブラ」でググって出てくるページ見ると、既存のcdecl関数を呼び出すことを目標にしてるみたいだけど、
自分はどっちかっていうと「なるべく自分で作ったもので間に合わせたい」という気持ちの方が強いな。 >>425
VBAでCのコード扱えれば良いんだけどね。
それに既にWin32APIで色々やってるし、その中には適切に使わないと危険なものもたくさんあるから、別に使っても良いと思うけど。
>>429
まず、アーキテクチャが異なるCPUについては既にWin32APIの時点で使えない。
それにアセンブラが主ではない。
memcmpの部分で使うだけで使う方は呼び出すだけだ。 >>431
例えばdllを作るとブックと一緒にdllがついてまわることになるでしょ。
ブックだけでは機能しないというのがちょっと...
ということ。 >>432
>まず、アーキテクチャが異なるCPUについては既にWin32APIの時点で使えない。
は?何言ってるの? VBAの環境なのにマシン語使ってやったぜー
ワイルドだろー
って自慢したいだけ お前ら素直に感心する事も出来んのかw
惨めやのうwww そうゆうひねくれた心を持っとるからいつまでたってもバカなんやで ちなみにどこに感心すればいいの?
機械語の知識が殆ど無いこと?
VBA上でごく中途半端な機械語を走らせる方法をネットで見つけたこと? VBAだけじゃどうにもならない、別途dllとの込みで扱うのはスマートじゃない。
そういう場合に使える方法があるということ。
他にもこの方法を使えればプログラムがスマートになるのにという場面もある。
これはVBAの制限によるものだけれど。
もっとも殆どの場合、これを必要とするコードを書くような事態自体ない。
普通はVBAではこの機能は実現出来ませんと回答することになるだろう。 >>434
すまんね。
君がどういうレベルの話をしてるのか、いまいち掴めない。
実際、そういうことも分からないから勉強中なんでね。
アーキテクチャが違うCPUってのが何のことを言っていて、使えないCPUについて具体的にどうして使えないのか示して貰えるかな。 >>441
dll大好きマンの俺としてはその意見に賛成する事態自体ないな 今どきアセンブラじゃないと
ダメな場面なんてほとんどない
速度が欲しいならC/C++で実用上十分 >>444
この場合は速度とか関係無いんで。
Cとかでも確かに外部dllを作れば可能だけど。
まあ、でもdll作る方が正論だわな。
問題は自分の望むdll作る能力が自分に無いことだね。 VBAだけで実現できない機能があるならDLLでいい
今どきのWindowsでアセンブラなんてまず必要ない Visual Studio利用が前提ならdll作るのに大した苦労はいらないぜ。
Expressでもいいんだしな。 アドインを入れろというだけで嫌がられるのに・・・。DLLなんて言った日にゃ「何それ食えるの?おいしいの?」ってなもんで。
更にregsvr32で登録とか説明した途端「そんなメンドくさい事をやらずに出来ないの?」とかぬかされてムカついた今日此の頃 いやDLLが嫌がられてるからって
毎回アセンブラで書いてたら
「これだけのことにそんな時間掛かるの?」とか
文句が変わるだけだろ dllの登録とかはグループポリシーとスタートアップスクリプトで処理すればいいよ >>448
ふざけてんなら教えてやんねぇから自分でやれ って言ってやれ シートをSQLでアクセスしたあとどうも変なことが起こる。
あしたデータをDBに入れてからSQLでアクセスして同じ現象が起きたら自分のプログラムミスだろうけど、
起きなければODBC for Excelを疑ってしまいそうだ まぁdllくらいは面倒くさがらず設定出来ないとな。
今後デプロイ作業とかやるようになったらそれどころじゃないしな。 結局自分の知識を言いたいだけのお前らw
ババアの井戸端会議より無法地帯だなw BBA → 高い化粧品を使っている
VBA → アセンブラを使っている
結論 → どっちもムダ VBAに不足してるのは主にGUIの部分であって、仕様上実現できない機能なんて相当高度な、それこそVBAでやるべきではないような大がかりなものだろ。 >>453
せめて何が起こったのかぐらい書けよ。
まあ十中八九お前の勘違いだろうけど。 >>457
そうだな
VBAで不足してる部分は
C#でやればいいことで
VBAにアセンブラ載せるなんて
原チャリにロケットエンジン
載せるようなイビツさ またソースも示さずエラーコードも示さずただエラーだ!エラーだ!って喚き散らすだけの人間が |三|
/_____\
|ギコーマン|
|___醤油_|
,>:::(,,゚Д゚) <呼んだ?
|(ノ.::::::::: |つ
|:::::::::::::::::|
ヽ___/
U"U >>457
もういい加減やめるけど、そのGUI部分で貧弱なMSForms使わずにCreateWindowExで組んでたりした。
んで、いろんな部品のクラス化とかを考えるわけ。
ところがどうしても制限でクラス内に置けないものがあるんでカプセル化が不十分なんだ。
それをアセンブラ使ってクラス内に置いてる人がいるもんですごいなあと。
アセンブラ部分だけdllにしても寧ろ中途半端。
各部品ごとdllにしないとね。
流石にそこまでの能力も無いし労力も割きたくない。
まあ、所詮VBAなんてダメ言語ってことかね。 >>458
すまない
エラーが色々あってそう単純じゃなくてついね。
例えば配列になるはずの変数Aを扱っててエラーが出たので内容を見ると
TypeName(A) = Empty かつ IsEmpty(A) = Trueなのに
Debug.Print A とやると
「Visual Basicでサポートされていないオートメーションが変数で使用されています」とか
調査中 俺の場合はもっと根本的な部分を高速化する事が狙いでマシン語を使おうと思っていたな。
If文一つ、ループ処理一つ取っても汎用化の関係で無駄な処理が挟まる事になるんで、
極々単純かつ処理時間に占める割合が大きい計算なんかをマシン語で書ければ処理速度がだいぶ違う。
C++言語がインラインアセンブラを備えているように、どうしてもマシン語かそれに近しいものじゃないと実現出来ない事がある。 はじめまして。
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 & "")」のところでエラー発生…。
何か間違っているのでしょうか・・・。 >>466
VBAのユーザー定義関数使っても条件付き書式の仕様上、軽くなることはないと思う
Sheetモジュールのイベントでセル塗りつぶしするようにコーディングすることをおすすめする >>466
対象の行に存在する値のみで判定すれば軽くなるんじゃない?
その関数だと行が増えるに従って遅くなる >>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
エラーについては具体的なコードがないから分からないけど、
そのページの様な色分けやるならこんなコードとかの方がいいと思う。 アセンブラやマシン語のことを神格化してる人がいるけれど
このスレにだって昔使ってた人もいるだろうし
ある意味覚えることが少ないからObject指向言語や関数型言語より簡単かも知れない。
でも昨今仕事上その知識が必要になることはまず無い。
いつまでも無用の長物にしがみついていないでその分別の勉強に力を配分した方が賢いとは思う。 >>466
そういう書き方をするなら下記のようになると思う。
i=EVALUATE("MOD(INT(SUMPRODUCT(1/COUNTIF(C1:C" & Cstr(j) & ",C1:C" & Cstr(j) & "))),2)")
でも、これは関数が分かってて、関数からアプローチした場合。
普通は自分も>>469のようにするだろう。
エラーになってたのはSUMPRODUCTが配列の積を計算する関数なので、その中のCountIfを分解出来ないからかな? >>471
神格化なんてしてねーよ。
XBAじゃ出来ないから仕方なくだ。
出来るならやってる。
じゃ、C#やVB.netでライブラリ作るとしても、結局中途半端になるということ。
VBAでオブジェクト指向なんてやんなきゃ良かった。 >>473
一般的にはある程度知識がついてきたら
用途にもよるけど絡みがある場合はC#やVB.Net側からEXCELの操作を行うもんだと思う。 その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) >>471
>でも昨今仕事上その知識が必要になることはまず無い。
ここはVBAスレだからそうだな お前ら何があっても絶対に>>474の様にはなるなよ
お前らには.Netでエクセルをいじるくらいなら肥溜めに突っこんだ手でちんこいじった方がなんぼかましだという事を知ってほしい 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個ほどグラフを作っているところです。
線形近似式を作るまでなら出来たのですが、
近似式を取得しようとすると、★★★のところで
「プロシージャの呼び出し、または引数が不正です」となります。
ステップインでやるとエラー無く通るので、☆☆☆の反映が遅いのか・・?
と、よく分からなくなっております。ご助言頂けますと幸いです。 COMをVBA以外から触るのってくっそ面倒なんだっけか。
確かに一度そういう記事を見たときに引数省略できないわ明示的に解放しないとメモリリークするわで、
下手に外部から弄るよりVBAだけの方が良さそうとは思ったな。 ところでさあ、お前らの中で「ボクはVBAerじゃない!」ってのが唯一の心の拠り所の人っている?…あ、いたwwww >>482
20年も経つし、いい加減かなりめんどくさい上、元々の設計からして奇々怪々 古いブックのデータを、新しいブックに移すだけで容量が変わる仕様は酷いよな。 うちの会社の情報システム部の人達、VBAばかり使ってるんだけど、これってシステム屋さんとしてどうなの?
変な質問でごめんね〜 >>486
ある言語が使えて他の言語が使えないなんてのはあり得ないから、
特別に何らかの言語を使えと言われてるのにVBAに固執してるとかでない限りは特に問題ないと思うけど。
もちろん別の言語使うとなれば移行期間と、それに掛かるコストの問題は発生するけど、
この移行で発生するコストに収支が見合わないなら如何なる言語であれ移行する方がおかしいし。 >>471
いまだにアセンブラでモーター回してる俺も趣味でVBA使ってるよ
ここを読んでるスレ住人の1/4ぐらいは使ったことある製品に入ってる バイブとか電動こけしなら
このスレの住人はそこまで使ってないよ 思い切ってF#に変えてほしいな
C#といいMSは言語はいいものつくるのになんでいまだにVB・・・ C# でもいいし PowerShell と言う手もあるしな 次のエクセルでは.Netモードと旧VBAモードと混在させておいて、次のエクセルで切ればいい >>487
うわあああああああ!俺の会社でもそのバグが始まった。
昨日それ見てなかったら、原因分からなくてパニックやったわ。ありがと
これから数千あるマクロ軍と戦うから、既にパニクッてるんやけどな >>497
javascripでいくってことはいずれはweb化するんかね >>499
んなこと出来るわけがない
ヲタプログラマの遊び道具はないんだよ 訂正
Excelはヲタプログラマの遊び道具ではないんだよ プログラマが文句をいうのと一般ユーザーが文句をいうのとじゃ大いに違う 拡張子で切り替えるとかはするかも。
でも、現行のVBAで出来ないことなんて殆ど無いわけで、新仕様作ってもそれで新しいことが出来る奴なんて殆ど居ないだろう。
いまだに4.0時代のマクロシート動かしてるところだって有るんだぜ。
そんな簡単に切り捨てられるわけがない。
個人的にはマクロシートは切り捨てて欲しいが。 ちょっと前にWindows 3.1からようやく移行した空港の話があったしな。
>>500
昨今はクラウドが流行ってて常に更新するのが流行ってるけど、
仕事で使うなら、やっぱりサポート切れて更新しなくなったヤツの方がいいな。 まあ期間システムにoffice使ってるような糞企業は滅びたらいいよ >>509
ほんとそれな
早くクラウドに移行してほしい >>507
お荷物であるかどうかは分からないけど
生きた化石であることは確か
生きてないけど 適材適所を知らない奴はコンピューターを使うべきではない。 てか、現状のVBAをjavascriptに置き換えぐらいなら自動で出来るんじゃね?
format関係ぐらいは独自で組み込むんだろうしさ >>513
それだと全人類の97%は失格だろうな
間違った使い方から始まる発明もあるんやで 全人類だと半分以上はコンピュータ使える環境に居なさそう。 アフリカなどの話だろうけど、逆。端末が無いと話にならない
現金を銀行まで出し入れしにいくよりも、ネット決済が主流になりつつある この画像がシート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 >>519
最低限って何が最低限なの?面積?それとも縦か横の長さ? >>518
申し訳ない、その芸人つまらないんだよねぇ >>519
まず、日本語が変。
「この画像がシート2にあって」とか「が打たれて」とか。
FINDで板厚を検索するところまでできるならその後はー行ずつ幅と長さが両方共指定の値より大きくなるまでループすれば良いだけだろ。
何が分からんの? >>520
幅と長さです。最低限というのは一番近い寸法のことです。 ああ、幅と長さが逆転することもあるわけか。
ロジック的には最初から幅と長さのラべルを無視してしていする方も各行の値も大きい方と小さい方で比較すれば良い。 >>524
元の幅と長さを比較して、大きい数字が幅なら幅の列を大きくなるまでループして大きくなったらその隣の長さのセル。長さが大きかったら長さの列をループって事ですか? いんや、幅とか長さとか考えるからおかしくなる。
大きい方と大きい方、小さい方と小さい方を比較する。 比較は同時にするでしょ。
各行の大きい方がシート1の大きい方より大きくて且つ各行の小さい方がシート1の小さい方より大きいのが求める値。
シート2は最低限順に並んでる前提。
幅と長さが逆転することを考慮すれば最低限とは何かの定義が必要になると思うけど、その順番に並んでる前提。
並んでいるとは限らないなら、定義を決めることから始めないと無理。 鋼材屋の問題か こういうのは紙資料を人間の目で見た方が百倍速いんだけど
どうしてもやりたい やりたくてたまらない しかも楽に ってなら
Aの板厚入れた段階で板厚グループにジャンプ
Bの幅入れたらそれ以上の範囲を色分け 同様にCの長さ以上を色分け するだけでよくね
BとCが両方含まれる範囲のうち最小を見るだけで答えは出る
と、以上の発想でそれをVBAで組み込みばおk
長さと幅が逆転してても幅がオーバーした時点でチェック・メッセージ出せばいいんじゃね シート2は順に並べる予定です。どんなコードになるんですかね?さわりだけでもお願いします。 >>519
vbaスレなの忘れてたわ
数式で完成させたから後は適当にやってくれ
コツは必ず縦長として考える事(横長でもいいけど)
https://dotup.org/uploda/dotup.org1351421.rar.html >>529
だからこんなの誰でもできるだろ。
FINDは使えるんだよね。
見つかった板厚の次の板厚も分かるよね。
For〜Nextも使えるんだよね。 VBAによるIE操作で土曜日潰しました。。
ビットコインの自動売買をVBAでやろうと思っていますが肝心の「買い」のボタンが押せません...プログラミング系の掲示板で聞いても挫折されてしまい、大ピンチです..万が一わかる方いらっしゃいましたらぜひ教えてください....
ビットフライヤーですがアカウントは無料で一瞬で作れます。口座開設しなければどう転んでも下手に取引が実行されることはありません。
↓↓ コードです >>533
>プログラミング系の掲示板
これはどこ? 533です
>>534
そっちでは本名に近いID使っちゃってるので勘弁してください
要はビットフライヤーの売り買いのボタンなんですがどうやら、価格数量を手入力しないと入力が認識されず売り買いのボタンも押せない感じでもう私には手に負えません… ビットフライヤーにメタトレーダー対応の要望でも出した方が早いんじゃないの。 そもそもサイトURLも貼らずに分からないんですねとか言われても困る
ビットフライヤーって何よ 指値注文できますよ
その指値価格を、手入力しないとダメな感じがします
urlなんかngワードに引っかかってるみたいで…ビットフライヤーでググって先頭のページですすんません 指値価格をマクロで登録するの???
なんかよーわからん。それに、そんなNG入ってるサイト見たくないわ
どうしてもやりたいなら、画像解析+キーボードマクロなどの手もあるぞ
それか儲かるってわかってるならさっさと外注すればいいと思う
クラウドワークに投げれば5マンぐらいでできるだろう >>542
IE操作はVBAでやらん方がええぞ
Win10/IE11になってから昔ながらの方法が次々と使えんくなって、みんな右往左往してる
対処法もあるけど動作が遅くて、コンマ秒の差で大損するようなトレーディングには事実上使えん
Win7でやるなら話は別だが
今は自動運転ならchromeのが簡単
入力もクリックもブラウザ組み込みのスクリプトでたいてい可能 あぁそうかやchromeの開発ツールでjsぶっこめば終わりじゃん
vbaでアホみたいなこと覚えるより、jsイチから覚えたほうが楽だし有意義だな >>544
使えなくなってるか?
どんな所で?
俺は問題なく使えてるように思うが、どこが駄目になったの?
>>533
どの言語でやるにしてもDOMの知識が必要。
押すのは多分簡単に出来るが、そのページがどう作られてるか次第な面がある。 あえて無理を承知でVBAでやるのがVBAerの心意気だろがw
VBAの貧弱な仕様に疲れてしばらくC#とPYTHONを勉強していたがそういう言語で作ったアプリを
渡しても誰も使わねえのよ。もう、日本企業では エクセル操作=業務という定義が確立していて他に許せるのは
一太郎ワードアウトルックぐらいなんだよ。窓際社員の作ったPYTHONアプリなんか信用できないんだってよWW
泣けてくるぜ・・・ >>548
そら日本のITは遅れますわ、という話やね
セキュリティに金かけられないからネット遮断したり権限締め付けたりするわけだしな >>549
スマホとタブレットの普及でPCわからないのがデフォになっちゃったからなぁ。今年4月に入社したT大出のヤツが「マクロ教えて下さい」と
言ってきたんだが内心「どんだけハイレベルな質問されるんだろ」とガクブルしてたらシート関数ですらSUMしか知らないとかそんなレベルだったんで驚いた。
講義でC言語やったそうだけど「さっぱりわからなかった」そうで。こりゃ日本やべえよ >>550
だってね、PYTHONってのはもう、dotnetやってて「こんなのがあったらいいのに」と考えるモノが全部そろってるんだよ。
俺のやってる仕事はGISなんかも使うんだが、こういうのはもうPYTHONの独壇場で、殆どコード書く必要が無いぐらい出来あいのが
充実してるのよ。EXCELに特化したライブラリもある。全体に動作がモッサリなのが難点なのと、文字コードで頭が禿げそうになる、PYTHON3系なら大丈夫かもだが。 >>553
へぇ〜〜
数学系は強いって聞いてたけど、そんな所も強いのか、ありがとう >>553
>文字コードで頭が禿げそうになる
www(ゴメン、つぼったわ) >>555
機械学習なんかで注目されているpythonがイマイチ普及しない理由はコレって言われているぐらいだからね。 >>557
いや、あのフレーズを言おうと思ったんだけど。失礼だからw >>553
GISって言ったら昔の話だがGoogle Geocoding API使ってVBAで住所→緯度経度取得は簡単に出来たな。
Yahooも出来たと思う。
xml扱えれば誰でもできる。
VBAでの簡単ってのが他言語に比較して不明だが。
ただ、それやって良いかどうかが分からん。
Webに埋め込んだりするのは良いんだろうけど、自分が情報取得する為に使って良いんだろうか。 >>559
APIは回数決まってる
それ以内ならok >>560
うん、それは知ってた。
けど、それはそれを利用したwebサイトに訪れる人数を意味してると思ってた。
Google Mapとの併用に限り認められるからVBAでの情報収集には認められないんじゃないかな。 VBA初心者です。
質問させてください。
複数ファイルに同じ文言を自動入力させたいと思いVBAで組み始めました。
ファイルを探し、開くとこまでは出来たのですが、最終行+1が上手く取得できません。
アップロードした画像ファイル(これはネットで拾ったイメージです)のような状態で最終行を取得すると、"261"行目が取得されてしまいます。
取得したいのは"258"行目なのです
どなたかコード毎サンプルを頂けないでしょうか?
よろしくお願いいたします。
https://i.imgur.com/GNoEnCb.jpg >>562
Sub foo()
Debug.Print Cells(Rows.Count, 9).End(xlUp).Row + 1
End Sub >>562
データの入ったセル範囲を取得しようとしてUsedRangeを使ったら書式設定されてる空白セルまで含まれた範囲を取得してしまったってとこかな >>563
回答ありがとうございます。
9は何の数字でしょうか?
>>564
そんな感じと思います。
ここで取得した最終行+1に別シートで入力した日付、担当者名、備考MSGを貼り付けるプログラムにしたいと思ってます。
ざっくり作ってるのはこんな感じです。
特定フォルダから、○○01.xlmsというファイルを開いて、最終行+1に別シートで入力した日付、担当者名、備考MSGを貼り付け
保存、閉じる
次のファイル○○02.xmlsを開く
ファイル名の数字は増えたり削除されたりするので、○○が含まれたファイルを順次開いていく感じにしようと思います。 >>565
この程度のことここで聞くより調べた方が早いぞ
cellsの引数も知らんの >>566
質問スレで質問したら怒られたでござるw そりゃ2次方程式の解き方聞いてる最中に"+"の記号って何ですかとか加算って何ですかと言われても困るだろう。
そこが分からなくて何で2次方程式なんだってことになる。 いや別にRangeとか基礎から聞いてもええんやが
質問のレベルにかかわらず、答える人がいるかどうかは別問題 >>567
怒ってるんじゃなくて呆れてるんだけど
まあVBAなんてえてしてそう言うものだと言えばそうなんだけどな
なんでもかんでも教えてあげるのもどうかと思うんで >>548
窓際社員瀬戸際の私はpython勉強しています(非情報システム系所属)。
そんな私はどうしたらいいでしょう?
ご教示ください。 Cellsの引数がわからないんじゃなくて
>>563の例で9列目を指定してるのはなぜ?ということでは
質問者のあげたサンプル画像がI列の最終行 + 1を赤く囲ってたから9列目としたんだろう >>572
質問者自身が9列目にした理由が分からんってことは無いだろう。
自らI列のセルを指定してるんだしさ。
9を何かの特別な数値と勘違いしたのかなとは思ったけど。 VBAでIf〜Thenの後を空行にすると次のElseIfが評価されないということは有るのでしょうか?
具体的には、
If var = 正常値 Then
ElseIf var = 異常値1 Then
(異常値の処理)
ElseIf var = 異常値2 Then
...
End If
のようなコードです。ElseIfがいくつも続くので最初に正常値にマッチしたらすぐに抜けるようにしたいのです。
最初のIfの後にブレークポイントを設定してもすり抜けているようです…
よろしくお願いします。 >>575
ないよ
他のとこ間違ってるんじゃない? >>576
ところが同じコードでIf〜の行を削除して二行目をElseIf→Ifに直したところちゃんと動いているようなのです。
最初のIfにマッチしてるということは無い筈なのですが… >>577
前後と処理の内容と何を比較してんのかわからんと答えようがない >>575
これSelect文使うべきじゃないの。 >>575
「正常値」と「異常値1」が定数か変数で同じ値とか >>577
変数が期待通りになっていないんだと思う。
ステップ実行していけば変数がどう変化しているかすぐわかるんだけど
まだデバッグを使いこなせないビギナーさんなら
msgbox var
をいたるところにちりばめて実行して
メッセージボックスで変数の変化をみるという方法があるよ
自分もデバッグ?なにそれ?なころはそうやってた >>577
Ifの次の行じゃなくて、Ifの行にブレークポイント設定して変数や定数の値を確認してみ
ブレークポイントは「その行が実行される直前で停止」だから win10 64bitでExcel2016使ってるんだけど
最近やたらに、「メモリ不足〜64bit版に〜」的なポップアップ出てフリーズするんだけど
なんかアプデで仕様でも変更したんかな どんな理由でフリーズする仕様にしなきゃならんのだ
いくらmsさんとは言え濡れ衣にも程がある >>583
2016 100台くらい扱ってるけど聞いたこと無いな。
あとofficeは64bit版出てはいるけど非推奨じゃなかったっけ Windows Defender で、フルスキャンしてウイルスチェックしろ
クイックスキャンでは見つからないので、フルスキャンしろ マクロが無限ループしているとか、バグってるのかも? とあるcsvファイル(測定器の出力でかなり細かい数値データ)があるのですが
この数値をExcelで一部変更して保存すると全体的に数値が勝手に丸まったりしてしまいます…
(変更していない数値も全て)
色々調べたのですがこのあたりは仕様?みたいなのですがなんとかならないものなのでしょうか >>589
vbaと関係なくね?
仕様ならどうしようもないじゃん
csvの中身読んでExcelに書き込んでいけばなんとかなるかもしれんけどそういうこと? >>589
お前のやり方が間違ってるだけ。
開くんじゃなくてインポートしろ。
そしてそもそもVBA関係無い。 >>589
Excelの表示(見え方)の話であって実データは変わったないのではないか?
Excelpで表示時の桁数を指定すれば正しい数値が表示されるんじゃないの >>590-592
どうもありがとう、なんとか自己解決しました
ここで聞いたのは、一応一連の処理をVBAでやっていたので…
Excelでは仕様としてcsv保存するにしても細かい数値は勝手に丸めてしまうようでした
1.00001、1.00002…と並んでいる数字もExcel上から上書き保存するとただの1になってしまいます
これはインポートしても同じ事でした
結果として修正するときは数字として扱い、保存する前に全て文字列とすることで解決しました
しかしこれでも数字の丸めを止めさせられるだけで、各所それなりに変更されてしまいます
例えば、1.00000はどうやっても1になってしまいます
あるときには便利な仕様なのかもしれませんが、やっぱり余計と思える方が大きいですね…
どうもお邪魔しました >>593
Excel 2013 の話だが
> 1.00001、1.00002…と並んでいる数字もExcel上から上書き保存するとただの1になってしまいます
再現しない
> 例えば、1.00000はどうやっても1になってしまいます
Excelで書式を設定して上書きすればいいだけ
当然csvには書式は格納されないので書式の設定は毎回必要 >>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形式で保存するなら、丸められることなく正確な値を保存できる) >>595-596
どうもありがとう
CSVを普通にExcelで開いた時点での表示形式は指数になってます
この時点ではある意味見た目上も全桁数表示されてるのですが
csv保存するときに自動的に普通の数値に変換して更に丸めてしまうみたいです
よくわからないのは0.00001は丸められないけど1.000001は1に丸められます
Excelのバージョンは2016です
いずれにしろ表示形式を変えることで対処するしかなさそうですね
とりあえず文字列にしてしまえば全て保存できるようで何よりです
確かにxlms形式なら全て保存できるみたいなのですが
測定器がcsvで吐き出すことを前提に色々と組んでしまっているので… >>597
excelをcsvで保存するんじゃなくてtextstreamとかでcsvに吐き出すようにすれば?
意味わからん挙動をするものに関してはそこを介さないのが一番のような気がするんだが >>597
保存じゃなくてエクスポートを試してみた?
自分の記憶では保存は駄目でエクスポートなら上手くいくと思うんだが。 あれ?
何か勘違いしてたみたいだ。
>>599は忘れてくれ。 Outlookで指定したメールのtoアドレスとccアドレスをエクセルに書き込みたいのですが、itam.TOとCCにすると名前が書き込まれてしまいました。そこでTOをやめてitam.SenderEmailAddressにしたらアドレスが入ったのですがCCは見つけられませんでした。
分かる方、お言えてもらえませんか? >>601
outlook.RecipientsクラスのpropertyAccessorから、getproperty使って取り出してるけど、今はソースを提示できない。
どっかの日本語サイトから見つけたんで、頑張って探して‥ 会社で「顧客名簿のDBから吐き出したCSVをエクセルで編集して又システムに
戻したいんだけど遅いくて困ってる」と言われて「エクセルじゃなく専用エディタでやれよ」
と言ったら「勝手にフリーソフトをインストールできない」と言う。つまり、泣き付けばマクロで作ってくれると思ったんだろうな。
冗談じゃねえと思ったが興味本位でネット漁って作ってやったよ。礼の一言もなんも無しだが、何も言ってこないから普通に使えてるんかな。
CSVをエクセルに食わせるのはQueryTableが一番?速いみたいね。データ型も指定できるし。保存は保存するディレクトリにブックをコピーして
書き出すとまあまあ速かった。と言ってもせいぜい30000件程度(会社規模が知れるw)だからあんま参考にならないかもだが。 >>603
すっげえええええええええええええ!!!!!!!!!!!!!111 >>597
> CSVを普通にExcelで開いた時点での表示形式は指数になってます
なら初めからそう書いてくれ
> この時点ではある意味見た目上も全桁数表示されてるのですが
本当になってる?
Excel 2013 だから動作が違うのかも知れんが 1.23456789E+00 を読み込むと 1.23E+00 になる
> csv保存するときに自動的に普通の数値に変換して更に丸めてしまうみたいです
指数表示は全桁読み込んでるけど表示上の有効桁を3桁に決め打ちしているように見える
なのでそのまま保存すると3桁分に丸められてしまう
> よくわからないのは0.00001は丸められないけど1.000001は1に丸められます
それ指数表示でどうなってるかを見ればわかると思うが...
って言うか指数表示の意味わかってないのか? >>603
自分の担当の仕事やんないでマクロせこせこ組んでるのってどうなのかな >>603
ブックに保存のあとDB更新はどうするの? >>603
勝手にフリーソフトインストールできないのに、勝手に作ったマクロいれていいのか? >>612
逆に金もらえばフリーソフトじゃないから入れてもいいのかな >>612
上から見たら単なるExcelファイルだから 単なるexcelファイルに見えるフリーソフトならいれてもいいのか >>615
お前が決める事じゃないし、合理的な回答とか求めてないし 企業だと、Excelは書類扱いやな
マクロも同じ(Excelを加工するExcelファイルという扱い)
「Excelマクロ禁止」って書いてない企業ならまぁ合法かもな(VBSはええんやで) Excelマクロ禁止ならWordマクロを使えばいいのに 下手に素人が自動化してデータを触るとデータが消えるかもしれない!
きちんと目視で確認すること! 電卓で計算した結果を入力するのが正しい、と思い込んでる老害が幅を効かせてるんでしょ いやいや、誰もマクロ禁止とは言ってないから
フリーソフトNGでもマクロ禁止と明言されてなければOKでは?と言っているだけかと
そして答えは>>617 フリーソフトを禁止している理由として
著作権とかライセンス関係の理由なのか
ウイルスとかセキュリティ関係の理由なのか
それ以外か
複合的な理由かによるんじゃね
会社で作ったのなら著作権は問題ないだろう
ウイルスは問題無いけどセキュリティホール的な問題がある場合もありうるかなぁ ソースコードそのものは外部のものを導入しても構わない、という会社が大多数だろうから、オープンソースを探せばよい うちのお客の社員用PCでは拡張子exeのファイルは起動できない
そしてインストール権限を認めてないのでインストーラーを起動できない
この辺が必要な場合は上司を介して情報システム部に許可をとる必要がある
まぁOfficeと社内用ツール以外は使うなよって感じ
ちなみにVBAには特に制限とかかかってない様子 CSVの行頭と,の後に'を挿入してから開いたらいいのでは?
文字列化して良ければの話だけど >>628
オープンソースでもライセンスはいろいろ
オープンソースなら商用利用も可能とは言い切れない C++で自作したフリーソフトなら入れていいのか?
エクセルマクロで実行ファイルを書き換えるのはありなのか? はいはい、おやつは300円までね
バナナはお弁当箱に入っていたらお昼ご飯だけど
別に持ってたらおやつとみなすわよ >>632
会社で作ったのなら言語に依らずフリーソフトにはならないんじゃね?
自宅とかで作ったのなら従業員かどうか関係なく一般のソフトと同じ扱いだと思う
実行ファイルを書き換えた結果
会社に損害を与えたら懲戒処分とか損害賠償とかの可能性もあるんじゃね?
悪意の程度とかいろいろ関係しそう >>634
マクロでデータ書き換えるのがありで実行ファイル書き換えるのが駄目?
csvだって帳簿の金額なら損害与えることもできるよ そういう時に必要な要件は、責任の所在を明確に出来るかどうか
マクロでトラブルが起きると、作ったやつが悪いか使ったやつが悪いか、みたいな面倒な話になって、ヘタすると業務が止まって
マクロで得られた時間の短縮という恩恵以上の損失が出る可能性があるというか、禁止してる所は過去に苦い経験が
あることがほとんど
例外を認めるのもこれまた面倒だから一律禁止にしてる所も多い
会社がある程度の規模になると、本当に小回りがきかなくなるんだよ
Windowsの壁紙の変更すら認められない、みたいな職場も見てきたから >>635
実行ファイルを書き換えてはダメとは書いてないんだが
結果とか必要性とかいろいろ関係しそうと言う意味
別の手段で実現できることをわざわざその手段を使う必要があるかとか、結果の程度とか
会社に損害を与えたら懲戒処分になる可能性があるのはどんな業務でも同じ ウィルスも簡単に作れるけどね。
昔、客に納めた文書が誤検出されたことがあって、問題になりかけた。
今ならあんなマクロは納めないな。 そもそも、VBA込みの仕事が殆どじゃないの?
フリーソフトは許可が必要だろうけどVBAについては最初から込みの話であって、駄目なら最初からそういう指示がある筈だ。
フリーソフトは駄目だからVBAで同じ機能を実現すれば良い。
どうしても必要だけどVBAで作るのが難しいなら上司を説得するか有料のソフト買って貰うしかない。 HTMLやjavascriptをメモ帳で組むのは辛いからテキストエディターぐらい入れさせてほしいわねえ
ブラクラならHTAで簡単に作れるんじゃね VBAでテトリスとかロックマンが作れるなんで知らなかったわ
というか感動した。
それを実装するのに特別な環境が必要だと思ってたけど、VBAだけで実現できるところがすごい 最大限好意的に解釈すれば、exeを直接起動するのは禁止って意味ではあるまいか
Excelを起動したい時はxlsファイルをダブルクリックするしかない、みたいな >>643
つまりネット上のサンプルプログラムのコピペはOK、と ガチガチの環境だとネットも許可されたURLしかアクセスできないんだよな 開発環境の話かな?
通常のオフィス環境で特定サイトのみOKてことないよね
NGなサイトがあるのはわかるけど。 本来は未認可のプログラム関連全面禁止のところVBAが抜け道的に使われているだけって場合が多いだろうから、
他のプログラムを使ってはならないのは何故かっていう疑問に合理的な回答は無いだろうなぁ。 >>648
オフィスが許可されてるならvbaも許可されてるんじゃないの?
未許可プログラム禁止の理由はライセンスとかセキュリティとかが主な理由だと思うけど
ほかに何かある? 俺の知ってる会社でネット完全遮断のとこあるよ
とあるジャンルで世界トップのメーカーだからセキュリティがめっちゃ厳しい
建物に入る前に所持品チェックがあるしスマホやケータイは持ち込み禁止
ネット上のデータや情報が欲しい時は専門の部署に内容やURLを連絡して結果を知らせてもらうシステム
すごく効率が悪いと思うけど、それぐらいしないと機密が守れないそうだ >>649
VBAはオフィス製品を拡張するのが本来の役割だから、その範囲なら認可されていると言える。
表計算ソフトで(標準的に備わっていない)データベース処理させたり、データベースソフトで波形分析させたりといった、
そういう用途は厳密にはアウトなはずなんだけどVBA使う人間のほとんどがそういう本来用途から逸脱した使い方をするので、
この辺りの線引きが他のプログラムと曖昧になるから混乱するのではないだろうか。 >>651
VBAを使う人の殆どがって
何か調査結果とかあるの? >>652
本来用途的な使い方をする場合はVBA利用する必要が無いくらいには機能が揃ってるっていうのと、
このスレで他のプログラムが使えない事に対する明確な回答が出ない辺りからの推測だけど。
だいたいこのスレでも「お前が詳しいのはVBAであってエクセルではない」という戒めの言葉がたまに出るくらいだし。 このスレでもIE操作とか何故にVBA?ってのがあるしね 本来用途?
随分おかしなこというんだな。
何をやろうがそれが本来用途だろ。
アウトかどうかなんて結局は責任の問題だ。
セル操作でさえ会社に損害を与えることができるし、嫌だったらVBAを使うの辞めろ。
フリーソフトが問題なのは責任を問えないからだ。
VBAで問題が起きた時に、作った奴や部署が責任を取ることになるのはどんなVBAでも同じこと。
だから良く知りもせずに結果だけをコピペする奴は迷惑なんだ。
仕組みを理解すれば何をやっててもセルの操作と同じだ。
部署として作った奴を信用するかしないかの問題。
或いは部署として危険なコードか安全なコードかと判断できるかどうか。 >>654
おれもVBAでIE操作してクロールとかやってるけど、
趣味程度にプログラムをやってるだけなのでプログラム環境がVBAだけなんだよね
あと、取ってきたデータをそのままExcelに入れ、フィルタやソートを使ってデータ編集できる点も便利だよ >>655
そうだよそうだよその通りだよ
フリーソフトやオプソは利用者責任として割り切る(/割り切らせる)しかない ExelVBAで、テキストファイルの書き出しをスレッドで行いたいですが、どうにかすれば
可能なものでしょうか?
Yes/Noだけでもいいので教えてください。 >>654
ブラウザ操作だとどの言語が適してるんかね ブラウザからデータを取ってきた後の処理がエクセルだと簡単だからVBA使うんじゃね
またはその逆 ブラウザからデータ抜き出すには何が一番適してるん? >>667
適してるってどんな基準で比較するのかによるんじゃね
どれもDOM操作するとかだろうから大して変わらない
自分の得意な言語でやればいいと思う >>665
ネット上に落ちてるデータの集計とか?
テーブルで組んであるようなのならエクセルに落とすのも楽だし >>665
htnmという概念を知らないのかもしれない >>667
インターネットエクスプローラーってやつ >>661
スレッドを扱うことはできる。
不安定ですぐ落ちるだけ。
セルを触った途端に落ちると記憶している。
気をつければそこそこ安定してできることもあると思ってる。
Msgboxのボタンを押すようなことなら落ちないと思うけどプロセスでも同じことはできるからメリットを感じない。
>>667
InternetExplorer.Applicationは遅いと思う。
MSXML2.XMLhttpとかhtmlfileの方が速い。
ただし情報取得以外にクリックするとか操作するならInternetExplorer.Applicationを使うことになるかな。
Seleniumとか外部のオブジェクトは使わないんだよね。 >>672
selenium使うならvbaは選択しないと思う
データ処理し易いからエクセル→VBA
クリックしたり操作しながら動的データを取るからブラウザ操作
python sqliteとか使う手もあるけど
実現したい事はどの手段でも実現できる ちょっと教えてください。ワークブックに含まれているマクロを起動時に実行する時
ThisWorkbookのWorkbook_Open()
あるいは標準モジュールでもauto_open
のどちらでも出来るような気がするんですけど、全く同じと考えていい?それとも何か違いがあるの? >>675
なるほど〜。Workbook_Openに統一しておきます。
リンク先教えてくれてthxです ユーザーフォームに線を書く場合ってラベルを弄くる他にないですか?折れ線を書きたいのですが。 図の挿入は?
グラフなら以下の方法もあるみたい
http://www.max.hi-ho.ne.jp/happy/YNxv9d92.html
APIとかで頑張れば折れ線ぐらいなら掛けるけど、めんどくさそう 測量系のサイトで測量した数値をExcelで図化するような
ものがあるはず そんなキーワードでググってみ
ものすんごいことしてるから CADかよ みたいな >>678
デバイスコンテキスト弄る経験有るならめんどくさいけど色々できる。
LineToとか。
Win32APIに慣れてない人にはお勧めはしない。 書く線はこの程度のようなもので、表示して数値変更出来て、数値の合計算出するだけなんだけど
https://i.imgur.com/NxhLNnG.jpg >>684
同意、フォームは使わない方が良いと思う
「この程度」と言ってるけどかなりめんどくさい作業 >>686
固定なら画像はって上にラベルでええやん APIでフォームに線を書くまで行けました。
フォームに形状入力してFINDで検索して該当した行を右に空になるまで線を書き続けるコードにしました。
最初の一桁の数字は方向。4が左、6
が右という風に指示してます。
開始原点指定して、
線をLINETOで書いてて書いたらその近くにテキストボックスをADDで追加したいんですが、LINETOで指定した原点位置とテキストボックスのトップ、レフトで指定した位置がちょっとズレるのはなんかあるんですか?
https://i.imgur.com/FVhURv8.jpg 秒単位で記録されてる1日分で数万件の動作ログから、時系列かつ動作種類別の棒グラフ的な物を作りたいんだけど、、、
仮に横棒にするとして一時間単位に別ても3600セルも必要になるわけだけど、こういうのってどうするのが良いの? 横棒グラフ的 じゃなくて横棒グラフそのものを作りゃいい
何故セルをグラフとして使うのかの理由が判らんと何ともいえないが
毎秒すべてのデータが必ず必要とも思えんが、間隔変えれば概略にできるし
特異点を知りたい とかなら数値を基準に求めるものだろうし、その部分の
前後をピックアップして表示するようにして なるべく判りやすいものに
するのがグラフ化の目的なんでは データ吐き出して普通にグラフ作ればいいんじゃないの
何に悩んでるのかよくわからん >>688
試して無いから何とも言えんが、クライアント領域関連か、座標系の違いかな。
GetClientRectとかTwipsPerPixelでググってみる。違ったらごめん。
>>689
説明が分かりにくい。
3600のセルにデータが取れてるならそれを指定すれば良いということになる。
多分、3600セルという多量のデータだから適当な所で折り返してて1時間の00:00秒から59:59秒の流れを持ったまとまりとして認識させることが出来ないとかかな。
良く分からんが各秒の値でプロットする訳じゃ無いわけだし、平均とか取るもんじゃないの? ビットコインの公開APIから値段を取る方法ってありませんかね
パワークエリ使ってたんですがプロトコル障害で使えなくなってしまい.... フォルダ内にあるファイルのすべてを対象に、
ファイル名の最後を「_ou.mp4」に変更するマクロを作ってください。お願いします。
例)〇〇.mp4 → 〇〇_ou.mp4 【追加】
ただし、すでに「_ou.mp4」に変更されたファイルは、何もしないこと。
悪い例) 〇〇_ou.mp4 → 〇〇_ou_ou.mp4 こうならないように。 >>697
公開APIのプロトコル障害なら公開APIでは取れないって事じゃないの? 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 が、同じフォルダ内にある場合は、
変換できずにエラーになるかも >>704
正規表現使えるんだからWhere-Objectいらんでしょ >>705
他の言語でもっと短く書けるぜ
ってか? >>699
filesystemobjectのインスタンス取得
フォルダ取得
フォルダ内のファイルを精査
mp4のみ抽出
拡張子取得
拡張子を除いて指定の文字列を追加した文字列を取得
ファイル名変更
これでわかれ dir関数とNameステートメントでループが一番簡単じゃね?
サブフォルダ考えなくて良いんだしさ。 explorerのアドレス欄にcmd入れて
ren *.mp4 *_ou.mp4
とかじゃなかったっけ 制約があったか じゃ3行で
ren *_ou.mp4 *._oump4
ren *.mp4 *_ou.mp4
ren *._oump4 *_ou.mp4 質問失礼します
あるフォルダ内に数千件のファイルが格納されていて、そのフォルダに新規ファイルが入ってきたときにそのファイルを抽出(ファイル名を取得)したいのですが一番高速に処理を行うにはどうしたらいいでしょうか >>712
「新規ファイルが入ってきた時」という条件がハッキリしないけど、
いずれにせよ最終的に全て取得して比較する方法しかないと思う。 >>712
高速がどうとかよりまず新規にファイルが入ってきたことをどう検知するつもりなんだ >>716
えっ、あるの?
IntersectやUnion使って自作してたわ >>712
基準となる時点のファイル名一覧をシートに記録しておく
比較時点のファイル名一覧を別のシートに記録する
vlookupとかで同じファイル名があるか調べる >>712
業務で行き詰ったらまず上司に相談したら? >>712
フォルダをモニタリングするツールが色々とあるからそれ使うといいよ
たいていファイルシステムイベントで処理してるから
自分で比較するのに比べれば数桁高速だと思う >>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 になるようにしたいんだけど >>726
またまたソフトのインストールが制限されて〜なんて言い出す悪寒 勝手にインストールできないなら許可貰えば済む話なのにな
業務上必要なら許可降りるだろ 「前の担当者は手作業でこなしていました。あなたにもできるでしょ?電卓は許可します」 それ作って給料もらっているんだったら自力でやれば? それ作って給料もらってる人がこの板にいるわけない。
せいぜいマ板がいいところ。 >>712
ロバストコピーでフォルダのコピー
その際に何を新たにコピーしたのかをログに書き出すオプションを設定しておく
そのログを読みこんで後はお好きに処理
勝手に上書きされたり、勝手に消されてもバックアップ取れてて一石二鳥 >>733
要件次第だけどrobocopyでも十分かもね
フォルダ監視オプション使えば細かいタイミングもコントロールできるし vbaでやるよりはタスク組んでバッチ的に処理する案件の予感 日記
今まで動いてたマクロがエラーで止まった
テキストファイルの内容を調べてリネームするだけの簡単な物なのに、調べたらファイル名にユニコードが入ってた
10年ぐらい前に作った物なので、今さら対応するのめんどくさいなあ。これも時代か
どうせ台風でヒマだからちょっとやってみるか フォルダに複数のシートが入っていて、それぞれ○○.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
列の転記開始。 自分で勝手に名前を定義すんのやめれ。
それはシートじゃなくブックだろ
file = Dir(path & "○○(○*.xls")
で○○(○が先頭にあるファイル(この場合はブック)が取り出せるだろ?
ワイルドカードの意味判ってる? 確かにブックのことをシートと呼ぶ人は結構いるイメージ >>741
シート名が判っているなら
for each で探さなくても
set ws = Thisworkbook.worksheets(シート名)
でいい >>712
http://madia.world.coocan.jp/cgi-bin/VBBBS2/wwwlng.cgi?print+200602/06020015.txt
他にもReadDirectoryChangesWを使った外人のサンプルは動いた。
けど、スレッド作ってるから危険なコードだね。
分かってる人が使う分には良いのかも知れないけどスレッド作らない方法を模索した方が良いんじゃないかなあ。 >>712
dirの結果をリダイレクトしてファイルに書き出し
またdirして前回の結果とfcする
繰り返し そのフォルダを、watch・見張る事は、できないのか?
そのフォルダに変化が起きたら、知らせる機能 >>747
個人のPCならフリーソフトでも探した方が早いと思う >>741
なんか要件とソースが違くない?
Findとかkwdは何してるの? >>748
早いか遅いかじゃなくて、VBAでやる方法が知りたいんだろ >>747
タスクスケジューラで定期的に調べるコードを動かす >>712は条件が不明すぎる上、質問者はいなくなってしまった
これ以上続けてもしょうがない アンケート入力してもらった内容を別シートのA1セルから下に書き込んでいく仕様です。そして、それが共有ファイルだとします。
共有の場合、同時にA1セルに書き込む可能性があります。
既に書き込みされていた場合、一つ下のセルに書き込むようにしてエラーを回避したいです。
どうしたら良いでしょうか >>754
共有をやめる
vbaでやれるなら共有にする意味を全く感じない 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 >>754
データを格納するファイルと
そのデータを管理するファイルに分ける
データを管理するファイルでVBAを動かし
データを更新するときは更新中か否か判別する値を持つ
DBとDBMSのような関係 >>756
マクロの記録でオートフィルタの記録をとって見比べる >>752
>>718
VBA でやるにはハードル高いかも >>760
C♯とかだとイベント検知できたような気がするけど c#とか使わなくてもvbsでフォルダ監視するファイル作って実行させとけばいけるんじゃない?
c#かvb.net使っていいならFileSystemWatcher使えば希望通りのことが出来ると思います。 >>762
できるかできないか、じゃなくて、
やり方を具体的に頼む >>741
いや、だから既にVBAでも出来てるし。
ハードル高いかどうかは組む人のスキル次第でしょ。 >>763
今までのやり取りである程度推測できないならスキルが足りてないだけでしょ フォルダをウォッチする機能を
Excelに持たせようとすること自体がセンス悪い Book1 Sheetあ Sheetい Sheetう Sheetえ
Book1 の Sheetう の中にボタンを作って、そのボタンを押すとエクセルの任意のブックを参照して
参照したブックのSheet1の内容をすべてコピーして、Book1の Sheetあ のA1を起点に張り付けたいです。
ご教授お願いします 永久ループに適当にスリープ咬ませて、シートに列挙したファイル名と付き合わせるくらいかな?
高速かどうかはわからないけど >>767
任意のブックとは常に決まったブックなのか、
それともその都度変わるのか?
変わる場合は、どうやって指定するのか。 >>769
その都度変わります。
ですのでファイルを参照するウィンドウを開いて指定する方法ができると嬉しいです それ自体は難しくないと思います。
あとは、コピー元のブックがあるフォルダが決まってるかとかで多少変わってくるかと。
例えば常にカレントフォルダにあるとか、コピー先のブックと同じとか。 >>761
そりゃC#使えるならSystem.IO.FileSystemWatcherクラスを使えばいい
でもここはVBAスレだし
https://msdn.microsoft.com/ja-jp/library/system.io.filesystemwatcher(v=vs.110).aspx >>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" >>763
vbsのサンプルなんでコピー処理を自分のやりたい処理に変えてみて下さい。
c#かvbなら上の人がリンク貼ってある先みるといいですよ タスクランナーのGulp, Grunt, Jenkins とかを使えば?
毎秒フォルダ・ファイルを、watch して、タスクを実行する。
タスクでエラーが起きると、watchを解除する
タスクランナー → アプリ
自分でプログラミングすると、逆になる。
アプリ → タスク
エラー処理も、難しい 盛り上がってるんだから、話題に入れないお前が諦めりゃいいんだよ >>772
VBAじゃ実用的なものは無理でしょって言う遠回しなお断りなんだが
まだvbsの方が現実的 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です。 ちょっとお知恵を拝借したいと
Excel 2010で作業をしているのですが、
大量にあるシートにある非表示セルをとある事情で全て削除したいのです。
ただし、
・どの行・列が非表示になっているかはシート毎に異なる(むしろ、消したい行・列を非表示にして、マクロで消すことが考えられる)
・場合によってはSpecialcells(xlCellTypeLastCell)で拾えるセルより下/右の行/列が非表示になっている可能性がある
(使用されているセルはAD250までだが、非表示セルがAF列や300行に設定されていると上手くいかない。
または、AA:ADが非表示だとZ列が拾われてしまう。)
・どれくらい下/右まで使用されているかは必ずしも分からない(さすがに、1000行は使わないと思うが、断言できない)
という問題があります。
数十から百程度のシートがあるので、10000行500列のような数を処理するのは時間がかかるため、
できる限りチェックは最小圏で済ませたいのですが、いい方法はありませんでしょうか。 >>781
ブックをzipとして解凍して出てきたxml
(\Book\xl\worksheets\sheet1.xml とか)
の中身みると
<col min="16374" max="16374" width="0" hidden="1" customWidth="1"/>
みたいな感じでどの行、列が非表示なのか書いてあるからそれを拾うとかどうよ >>780
>Int(i / 100)
をDebug.Printしてみる >>781
ドキュメント検査の中に非表示の行・列を削除する機能がある
VBAなら
If Columns(ColumnNumber).Hidden = True Then Columns(ColumnNumber).EntireColumn.Delete
If Rows(RowNumber).Hidden = True Then Rows(RowNumber).EntireRow.Delete
をそれぞれ列数・行数分 >>782
xmlにそんな記載があるんですか。
確かにそれなら出来そうですが、それを解釈させるマクロを書くのは面倒くさそうな感じですね
それに、拡張子をzipに変えるとxmlが取り出せるというのを知らない人は多そう
(自分が使うために作るんですが、欲しいと言ってる人にあげる予定なので、難しいことは抜きにしたいかな…)
>>784
実務的にはそれを For … To … Step -1 で回すか>>782で調べたものを使うんでしょうが、
そこが問題なんですよね…
ところで、Columns(ColumnNumber)ってRangeオブジェクトを返すと思うのですが、
EntireColumnが必要なんですか?
いえ、Rows、Columnsあたりはよく分かってない部分があるので、自分の認識不足かも知れませんが。 >>784
(VBAに目が囚われて、非表示検査のことをすっかり忘れてた)
こちらは、あとでいじってみます。
そんな便利機能があったのか… >>780
良く分からんが■と□の数が同じで良いのか?
どっちもInt(i/100)個表示するようになってるが。
最初の例では□は10から■の個数を引いてたよね。 ブックが大量にあるならドキュメント検査の機能をVBAから起動することもできるみたいよ
Set di = book.DocumentInspectors(3)
di.Fix Status, Result
DocumentInspectorsコレクションの3がHidden Rows and Columnsだってさ xlCellTypeVisibleで表示されてる領域が取れるね。
で、それ以外が非表示ということで、指定領域以外の領域を返す関数作ればいけると思うのだけど。 >>779
>>773程度ならVBAでも同じようなもんだし、今時vbsでやるくらいならPowerShellなりC#の方がマシ そりゃライブラリ揃ってるC#でやりゃ簡単なのはわかってる。
VBAでなんとか出来ないか?ってのが醍醐味でしょ >>790
PowerShellには違和感ありまくり。なんか「覚えよう」と言う気になれない。どうせならC#を統合して欲しかった。 >>791
VBAで苦労したいなら>>718のリンク先をVBAで実装するだけでしょ
いまさら醍醐味とか言われてもね Excel起動中だけフォルダ監視したい状況ってどういうケース?
それなりの信頼性が必要なら稼働監視も必要になってくる
VBAでやるならわざわざwin32使うより
新旧状態比較のほうがまだいい気がするけどね >>789
>>713のRangeからRangeを引くメソッドが役立つね >>790
いちいちエクセル立ち上げなきゃできないvbaなら見た目には見えないvbsの方がマシじゃね
クソかミソかみたいな話だが
まあそもそも俺はC♯等々でやるべきと言う派閥 バッチ処理ならvbsがいいけど、エラーログやらなんやらって思うと結局エクセルvbaの方が便利すぎて >>795
> Excel起動中だけフォルダ監視したい状況ってどういうケース?
> それなりの信頼性が必要なら稼働監視も必要になってくる
醍醐味とか言ってる奴に実用性求めてどうするよ w
> VBAでやるならわざわざwin32使うより
> 新旧状態比較のほうがまだいい気がするけどね
理由は?
自分がそれしか理解できないからってこと? >>788
そんなこと出来るんだ…
検査中はマクロは止まるんですかね…?
>>789
その考え方はなかったですね
これはこれで、やり方を考えてみます ようはExcelの処理の中で高度なことが必要になったわけで、単独なら他の言語でも良いわけだ。
じゃあ高度だからといって他言語と連携させるのが良いと考えるのか、それともそれはカッコ悪いと考えるのかという話だと思う。
それと、その人にとってどれくらい高度なのかによって変わる。
俺はカッコ悪いと考える派なんでWin32APIを使うね。
別に苦でもない。
ただ、そもそもフォルダ監視が本当に必要なのかは疑問。
初心者の質問は結構、無理を通そうというものが多く、仕様を見直すとそんな機能は必要無かったとなることも多い。 適切な要求仕様を考えるのも、また一つの技術だからね。 初歩的な質問ですが、コードを記入して間違ったときに記入するときに削除をすると
通常の削除ではなく、そのスペースがなくなり上書きのようなものになり
直そうとするとそこから全ての文を打ち込みし直さないといけない状態ですが
通常の文のように削除、追加するようにはどうしたらいいでしょうか? >>804
プログラミングというのはコンピューターに対する処理手順の説明
お前みたいな説明の下手な奴はセンスないからプログラミングやめろ >>805
雑談スレでもなく、質問スレでそんなにキャンキャン切れるのはプログラミング
向いてないからやめたら? >>806
どちらにしてもなにいってるかわからないからやり直し どっかでInsキー押し間違えて入力モードが切り替わってるんじゃないの。 >>804
>>805の言ってることは厳しいし、説明の上手い下手がセンスに直結してるとは思わないけど、初心者の人は説明が下手で回答を遠ざける人が非常に多い。
少しは文章を推敲すべきじゃないかな。
相手のエスパーを期待するってのは結局人にやらせたいってだけと受け取る人もいるだろう。
テキト−に考えてるのか分からないけど、自分の問題となってるコードをそのまま質問者に丸投げしたり、やる気が感じられないんだよね。 質問する側がこんなキチガイみたいな煽りする時点で答える必要はない こういうおかしな日本語を見ると漠然とした不安を感じる
現象としては>>808だと思うけど このスレは自分が答えられない質問をする奴は基本貶す方針で運営されてるからな >>814
その方針とやらに従うかどうか
決めているのは自分だろ
勝手に答えてやればいい >自分の問題となってるコードをそのまま質問者に丸投げしたり、やる気が感じられないんだよね。
まだ良いほうだよ、それ。w
とにかくコードも示さずエラーがエラーがってどんなエラーが出てるのかも示さずな奴も居たからな >>814
そら答えられんわ
日本語としておかしいんだから 初心者です。
同じフォルダ内の複数のExcelファイルをひとつにまとめたいのですが、方法を教えていただければうれしいです。 >>819
シートに全部まとめて保存します
その後余分なファイルを削除します >>816
なにやってるのか知らんけどスクリプト言語としては十分な性能だと思うが >>819
zipフォルダにぶちこめばいいんじゃね?
って言われたくなきゃもっとやりたいことをきちんと書かなきゃダメだわな >>819
エクセルブックをまとめると一口で言っても、シートを一つのブックにまとめたり、データを一つのテーブルにまとめたり、いろんな解釈が成り立ちうる
というか、エクセルブックをまとめるというのは、何らかの作業目的を達成するための手段だろう?
初心者は自分でイメージしている手段の実装方法を質問するんじゃなくて、目的から説明して最適な方法を質問した方が良いぞ >>821
CUIで動くコマンドとして捉えるとやっぱり遅いし、ワンライナー書くには便利だけどそれ以外のメリットがあまり実感できないんだよな PSはともかくとして.NETにメリットを感じないなら
そりゃ使う理由ないよね あのクソめんどくせえバワーシェルでワンライナーとか正気の沙汰とは思えんな PowerShellの話題はPowerShellスレでやるんだ ワークシート関数とプログラムの組み合わせで複雑な計算も簡単に書けるというexcelvbaの長所を活用しようよ ( ・ω・)∩シツモーンです
最近ティンコが痒いんですが
どうすれば良いでしょうか
教えてくさい >>830
風通しをよくするのが重要です
陰毛を剃ってノーパンで過ごして下さい >>830
無水エタノールでもかけときゃ治るやろ
どうなっても知らんがな >>830
Do Until ティンコ = 痒くない
Call ティンコ掻く
Loop >>833
途中でオーバーフローして出血しそうなコード まずは医師の診断を受けろ
最近東南アジア行ったんだろ? VBAでサジェスト機能?をやりたいのですが、フォームにコンボボックス1を配置してシート1のA列にあるリストを一文字入力したらコンボボックスに候補が出るようにするコードが知りたいです。
欲を言えば、『田』と入力したら『田中』、『田口』とか『田』の候補が出てきて田中を選択して、スペースを入力してまた『鈴』と入力したら『鈴木』や、『鈴鹿』とまた候補出てきて入力出来るように出来ますか? >>837
若干挙動は違うけど
自分がよくやる手法が>>284
Splitあたりで工夫すればスペースで区切ってできるかもね リモートデスクトップを使用してADサーバへアクセスし
変更するマクロを作成しています。
shellを使用して目的のサーバを起動させることは出来たのですが
そこから開いたサーバを操作するにはどうしたらよいのでしょうか?
何かやろうとしてもローカルPCの方を操作しようとしてしまいサーバの方を操作できません。
曖昧な質問で申し訳ないのですがよろしくお願いします。 >>842
VBAでやる必要がわからない
それこそpowershellとかの方が良いような
それかマウスやキーボードを操作するとか >>843
ご返答ありがとうございます。
powershellについて調べてみました。
これをサーバに作成しておき、
ローカルPCの方のマクロボタンを押して起動させ、
ADの設定変更をするようなマクロを作りたいと考えています。
起動させたサーバ側を操作する方法があればご教授いただけないでしょうか?
よろしくお願いします。 >>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に入ってるんだっけか? あ、コレクションに代入してるときのcolumnのjは間違い
1ね
わかると思うけど あ、あとinptedが入力済の文字列ね
どっから代入してくりゃいいか質問文からは読み取れないので コピーのコードどが間違っているんでしょうか?
シート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 >>844
サーバー側にAPIをつくっておいて
HTTP-POSTでPowerShellを走らせるコマンドを送りつけるとか
そこまでやるなら、もはやVBAにこだわる必要ないし
セキュリティも知らないけど >>849
なんというエラーで止まるのでしょう
構文には問題なさそうなので、コードではなく別の要因では 実行時エラー9
インデックスが有効範囲にありません。
とでます。
で、デバックをおすと該当部分が黄色くなります。
シート名は変更していません。 〉〉851
なぜかダウンロードした真っ皿なサンプルコードに移し替えたらできました。
シート名も変更せず、シート数も変えてないのに何かが変わっていたみたいです。 >>844
windowsならosの機能でリモート保守機能があるはず
それをpowershellから使えばいい >>853
何故かじゃないでしょ。
うごかない環境で
Debug.Print DataLastCell.Address
くらいやっときなよ。 >>846
2文字目打ったら更に絞り込むにはどうしたらいいですか?
listは空にできますか? >>853
ダウンロードってのがよくわからないけど色んな環境で使い回しているのなら
ExcelのバージョンまたぎでVBAが動かなくなることがある
同じブックを2003→2007→2003とかで使い回すと最後の2003の時だけエラーが出たり >>856
あ、ごめん、頭にcomboboxクリアするコードいれなきゃダメだわ
それぐらい調べて 二文字目以降も絞るはずだよ
likeステートメントで調べて >>858
これでいけました。
ありがとうございます。
>>839
参考になりました。ありがとうございます。
スペース区切りで2項目も出るようにしらべてみます。 加減乗除をやりたいんですが、式のセルの下に直で式を書いて、値に数値が出るような仕組みはどんなマクロになりますか?
パラメーターは後に記号にして計算さしたくて、短縮計算風に出来ませんかね?
https://i.imgur.com/dCH8v0R.jpg 構文解析?短縮計算とは変数のことかな?
計算では括弧や優先順位はいいのかな? >>864
数値のセルに名前をつけてたとえば
h
w
t
にしといて、式に
=h*w-t
ってやると計算される。2013ね。他のバージョンは知らん。
日本語の名前でもいけると思う。 構文解析っていうのか分かりませんがが、四則演算でかけ算、わり算優先です。式は括弧もありです。
最終的には、フォームのテキストボックスとかに式を打って、ボタン押して計算させるものを作る予定です。
https://i.imgur.com/ywonMIZ.jpg >>864
式に使いたい項目が動的に増えたり、演算子の順序変えたりしますか?
後、式と結果を出力するセルも画像のままでいいのてすか? >>869
パラメーターは下に増えます。演算順序は変えません。括弧、かけ算、わり算優先です。
答えはそのセルでいいです。 >>870
一つのテキストボックスに
(a*b)+3/4
みたいに入力されたものを解釈して計算する感じでしょうか? >>864
マクロ4.0のevolute
vbaの可変変数
辺りが合いそう
もっと具体的に何がしたいか書けば良い回答もらえるかも
今のままだと意味がわからん (1) 計算記号を半角の +,-,*,/,(,) に置き換える
(2) 式の中のパラメータを全て数値に置き換えた文字列を作る
(3) 出来上がった式の先頭に "=" を付ける
(4) 答えを出したいセルに (3)の式を書く
で出来ないか? Dim 式 As string
式 = "(1+2)*3"
Range("D5") = ExecuteExcel4Macro("EVALUATE(" & 式 & ")")
とりあえず、文字列変数の”式”に計算式代入してますが、代入をテキストボックスから代入にすればD5に結果が出ます。 そもそも置き換える意味がなくないか
https://i.imgur.com/ZAuSaoz.png
=
(
INDEX(B:B,MATCH("w",A:A,0))*
INDEX(B:B,MATCH("h",A:A,0))
)+
INDEX(B:B,MATCH("t",A:A,0))-
INDEX(B:B,MATCH("m",A:A,0)) マクロ使わなくても>>866ので十分じゃないの?
式を文字列としても表示したい場合もワークシート関数で済むし >>871
そんな感じです。
>>872
ある物の大きさだったり、重さだったり、面積とかを計算で出したくて、物ごとにパラメーター数値をそれぞれ持たせて、Aの大きさを計算したり、Bの大きさを計算するのに使う予定です。
イメージの順序は
@フォーム1のテキストボックス1に種類を入力。
計算ボタン→Bへ。
パラメーターボタン→Aへ
Aフォーム2
種類別にシートに登録されてる基礎パラメータ―値を取得し数値を転記させる。
基礎値は変更可能で変更したらパラメーター数値を上書きしフォーム1へ戻って計算ボタン。基礎値は種類によってなしもあり。
Bフォーム3に決められた項目があって、面積や重さ等を算出し転記。
イメージはこんな感じで、決められた項目の計算式はマクロに組み込む予定で、自分で算出したい時に式を記号で書いて計算出来たら便利でいろいろと用途が広がっていいなと思ってます。
説明下手ですみません。やりたいことは伝わります?
https://i.imgur.com/jUHfvjj.jpg ExecuteExcel4MacroじゃないEvaluateでも出来そうじゃない? ただ、汎用性を広げると結局、Excel関数と何が違うの?という話になってしまう。
自分で算出したい時に式を記号で書くのと式をExcel関数で書くのどっちが良いかという話。 >>866
が一番楽かな
俺は名前を付けるのが嫌いなので(あとで探しにくい)
>>875みたいに数式を工夫するけど 簡単にいうと
長さ1センチの棒が10個繋がっていて.
それぞれA1〜A10という記号。
@A5までの長さは?
Ans=A1×5
Ans=A1+A2+A3+A4+A5
Ans=A1+A2+....A6-A1
どれでも同じ答えになるけど、式はバラバラでも答えが出るような物をマクロで書きたい。 >>881
言うのは簡単だけど要件定義をしっかりしないと無限に答えが出るからどうしようもないぞ
Ans=(A1+A2)+A3+A4+A5
Ans=A1+A2+A3+A4+A5*1
なんてのもある
何を省くのかを全部決める必要がある >>881
A1〜5が 1.0、1.0、0.9、1.1、1.0 みたいなこともあるのかな? >>881
構文解析とか字句解析とかパーサ、レキサとかを勉強したらいいよ 構文解析とか面倒くさいことせずにそのまま式として使えばいいじゃん
何か不都合があるの? >>886
横とか縦とかを使いたいって要件があるからじゃね >>886
原価計算をマクロで作っててどうしてもやりたいんですよね。 >>889
横とか縦とかはセルに名前付ければいいでしょ?
名前付ける部分にマクロ使うのはわかるけど
四則演算の数式の解釈をExcelに任せずわざわざ自作ことないんじゃないの? >>884
情報の後出しにならないように他にも条件があるならすべて書くがいい >>893
やりたいことは>>877。
種類 A
式
W×H/1000/1000
答え
○○
式
D0×(T+2)+20+30
答え
○○
みたいに計算がしたくて、種類によって記号に与えられてる数字を反映して計算。使う計算は、+、-、×、/の4つと括弧。 ボタンだけシートに置いてフォーミュラ使ったほうがエクセルでやるメリット活かせそうな気がするが 例えば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
こんな感じで計算式とデータを元に計算できると思う。
スマホから入力で実際には試していないから間違いは有るかも。 名前付き範囲とFORMULATEXT()使ったスマートだと思うがな >>896
仕様を満たしていないから0点と言われる可能性もある >>877 の画像のデータをDBに入れて
sqlで計算させたらいい
つまりAccessを使うのがいいと思う >>898
そりゃ、コード作成依頼は受けるつもりが無いんでね。
わざとじゃ無いけど正直、仕様からわざと外したいくらい。
だから最初から仕様はまともに読んでない。
考え方を示しただけ。
後は自分の仕様に合わせて自分で作ってくれってこと。
自分が示したコードは最初から変数を%1とかにしたけど、シート上に変数のリストを持たせれば>>864の仕様により近くなるけど、そういうことも含めて自分で工夫出来て欲しい。 >>902
お前には関係無かろう。
コードも示せないくせに。
そんなに言うならお前が仕様通りのコードを示せば良いじゃないかw 種類選択して、行に並ぶ全記号をループ処理でフォーム2のテキストボックスに転記させ計算ボタンをクリックして書いた式を+なりsplitで区切って+なら足し算、-なら引き算って感じでは無理かね?
複数条件が無理そうだけど。()の概念がなければなんとかなるのかね? >>904
そのやり方だと複雑な計算式や()が付いた式の場合に難しくなると思う。
上でも書かれてる構文解析の話になる。 >>905
だから知らんのに答えようとしてスレ荒らすな無能 >>903
頓珍漢なコードでどや顔されても迷惑なだけ じゃあおまえが頓珍漢じゃないコードを
書いて反論すればいい。 荒らしてるのはどっちなんだろうね。
>>906も>>907もコードも考え方も示さずに文句しか書かない。 荒し?
事実だろ w
そもそも既に
簡単にやりたいなら>>866
ちょっと工夫して>>875
ガッツリやりたいなら>>885
が既にでてる
>>896でどや顔は恥ずかしいだけ で、肝心の質問者は全然出てこないいつものパターン w 結果希望のコードは出来ないで終わりだな。
次の方どーぞー >>910
バーカw
これだからレベルの低い癖に難癖つける奴は困るんだ。
そもそも多少書ける奴なら構文解析が面倒くさいのも分かる筈。
それでも構文解析にメリットが有るなら分かる。
今回、一体どこにメリットが有るんだ?
理由も無しに構文解析でやる奴はいないからコード例すら出てこない。
>>866は現実的な案だ。
だが、使用者にセルに名前を付けることを強いる方法だ。
大したデメリットではないからこの選択肢はありだが、最初に提示されても質問者が乗ってきていない。
幾つかの選択肢が出るのを待ってるのかもしれんが、それだったら別の案を提示しても良いだろう。
お前は全く分かって無いようだが、>>875は質問者の質問をそのまま否定したものだ。
つまりExcel関数を使えというものだ。
俺もこの意見に賛成だ。
それが>>879だ。
だが、質問者の意図をこちらが完全に把握するのは不可能だ。
状況によっては質問者の考えを取る場合もある。
実際、俺もそういう場面があってその時は>>896とは少し違うがEvaluateを使った。
はっきり言って>>896はコードを手直しすればかなり有力な案だ。
マクロでやりたいならな。
>>875も有力だ。
マクロでやらないなら。
多少書ける奴ならそんなことはすぐ分かる。 >>915
>>902
中身のない長文はバカ
の見本だな 俺はそれよりも何よりも>>896がスマホでどう入力してるのかが気になって仕方ない >>916
中身が理解出来ない or 文句言いたいだけの間違いw
>>917
別に、そのまま全部手打ちだよ。 案の定荒らしとるやん
無能の答えたがりは排除するに限る >>915
構文解析はちゃんとかければ良いんだけど、めんどくさい+例外が多いからなー
その点を完全にクリアできるなら有力候補だね。俺には無理だわ
>>866
はchangeイベントで毎回A列のセルそれぞれに名前を付けるってコードを走らせれば、直感的でわかりやすくなるかもね
>>916
中身があるのが見えないのか、勿体無い >>920
> 中身があるのが見えないのか、勿体無い
あの程度の中身であの長文 w
マジで言ってるの? 求められてるのはテクニック自慢知識自慢の回答じゃなくて多少泥臭くても質問者が理解できるような回答だけどな
業務に使うんだとしたらなんか知らんけど動いたじゃ駄目だからな なんでもExcelでやりたがる病の次は
なんでもマクロでやりたがる病かな
こういうケースはコードを提示するよりも
選択肢のメリット・デメリットを教えてあげるほうが
質問者のためになると思うけどけどね 文句言ってる奴は何も参考になることが言えんようだな。
というか、前から思ってたが分かりやすいから言ってやる。
ID変えてご苦労さんw
>>923
だからこそ考え方を示すべきで、コード作成依頼は駄目だと思う。
>>896なら動かしてみれば質問者も理解出来るだろう。
そんなに難しい部分も無いし。 何も書かなくなったってことは解決したと思っていいんじゃね > >>896なら動かしてみれば質問者も理解出来るだろう。
頓珍漢なコードを動かしてもしょうがないだろ、どや顔君 w 無能は混乱させる発言をするよりは何も言わない方が上策だという事が分かってない
だからこそ無能なのだが 「混乱させる発言をするよりは何も言わない方が上策」
これが事実であることを証明してみなさい 一連のレスで充分証明されてるだろ
理解できてないのは「無能」と言うことまで w ○○だから無能である
無能の定義は○○である
定義によると○○だから無能である
これが証明
循環www >>933
> 沈黙は金
http://www.weblio.jp/content/%E6%B2%88%E9%BB%99%E3%81%AF%E9%87%91
この「沈黙は金・雄弁は銀」という表現が成立した当初は、金よりも銀の方が価値が高かった、
つまり、、元々は、沈黙よりもむしろ雄弁を称えた格言であったという説がある。 >>935
こういうマクロが欲しい→自分じゃできない→誰かに作ってもらう
って考えの人には教えてもしょうがないからな え、まだやってたのw
>>915がうまくまとめてるのに
もうちょい人生有意義に使おう 有効な君たちへ。
Aと入力したら、コンボボックスにadditemでAから始まるキーワード候補を入れ込んで矢印ボタンを押さなくても入ってる候補を自動で全て表示って出来ない?
dropdownって書いても最初の1個しか表示出来ないんだが。
リストビュー使わずコンボボックスのみは無理かね? >>939
昔作ったな、それ
全部表示されるはず
リストの内容を一度確認したほうがいいかもしれない
でもバージョンによるバグかもしれない
アップしてくれれば確認するよ >>942
写真は辞めてくれ。見るのめんどくさい
出てきたからあげるわ
大体やりたいことはこれだと思う
・設定シートのB列に表示したいもの。C列は入力する文字を入れる
・入力シートのA1に「う」と入れて決定。リストが現れて「東京」「北海道」が現れるので選択する
もちろん「う」じゃなくても「東」なんかでもいい。場合によってはB列に「渋谷」とかいれてもいいかもしれない
https://dotup.org/uploda/dotup.org1380568.zip.html
自分で言うのも何だがこれ超便利。かなりオススメ >>943
なにこれすごい...
これは便利ですね!ちょっと理解するには時間がいりますね。ありがとうございます!
キーコードF12のところは何をしてるんですかね? >>924
こういう意識高い系が一番困る。
相手のため、とか何で上から目線なんだよ。
ExcelVBA質問スレなんだから、ExcelVBAで解決できないなら黙っとけ無能。 >>944
あ〜F12な。結局使わないから封印してたの忘れてた
リスト選択中に、enterじゃなくF12を押すとB列じゃなくてA列のIDが入力される
都道府県の場合なら、都道府県番号なんかを入れておけば便利かもな
リストの内容によっては全く使わないかもしれない
好みで設定したり拡張したりしてくれ >>946
教える方が上ってのは常識だよね。君は教室で暴れるタイプだったのかな?まぁそれだったら言っても分からんかもしれない
必ずしもVBAで解決する必要はない。可能ならエクセルや他のアプリケーションに任せたほうが遥かに早い場合もある
もう少し視野を広く持とう >>948
たかがvbaのしかも一つのことだけで
上の立場になったと錯覚できるのか
こう言うのが職場の役割の上下関係を
人間的な上下関係と取り違えてパワハラとか問題を起こす >>949
君は本当に謙虚さが足りないな
教えるという行為は分野が何であれ、それだけで上なんだよ
別にそれが人生論でもvbaでもケツの吹き方でも何でも同じだよ >>947
なるほど。ありがとうございます!
大事に使わさせていただきます! >>949
立場を教えてもらってるおまえは
下なんだからちゃんと理解しろよ >>951
たかが一つ教えた気になったら
全部が上だと思うのが間違いだと指摘している
ちゃんと教えてやるから正しく理解しろ >>954
人の言ってることを勝手に拡大解釈するようなアホに教わることはないんだ、スマン >>955
このスレに質問した人も
あなたに教えてほしいとは言ってないだろ >>956
意味がわからない
質問者が回答者を選ぶシステムは無い
まぁ仮にあったとして、俺は>>1>>73>>110>>167>>875と>>943
(167-875の間は調べるのがめんどくさくなった)
だけど、そこまで悪い回答者ではない。指名も多数あるだろう。ははは
回答もロクにせずに教室で大暴れしてる誰かとは違う 回答が出来ないならせめてスレ立てぐらい頑張れ
1000里の道も一歩からだ どうみても質問者より回答者の方が多いし回答者同士で質問を奪い合ってる状態
もう自称上級者が「教えさせてください」と頭下げていいレベル
てかお前らの態度次第じゃ質問してやってもいいんだけどどうする?ちゃんと答えられんのか? >>960
はい、是非質問して下さい
練磨のため、社会のためにも問題解決に励みたい所存です >>961
間違えた。
意識高い系なんじゃなくて、ただのバカだった。すまん。 >>961
VBAで次スレを一発で立てることは可能ですか? >>963
「一発」が何の一発か分からんが、立てることは可能
ただ5chになってからの仕様は知らないのでvbaでの回答はできない
vbaでそんなシステムを作るよりも、専ブラ使ったほうが早いと思う >>958
回答者を選ぶシステムがないから
勝手に教えたのは自分だよな
勝手に教えておいて立場が上とか傲慢だよなってことだアホ >>965
だからそう言ってるじゃないか
俺は傲慢で不遜だしそういう態度を取りたいから回答を続けているんだよ
で、回答をもらえた方も問題解決できてハッピー
誰も損してないね
君がここ何か文句を言いたいなら、俺以上に早く正確に回答することだけど、出来るのかな? >>966
VBAでQiitaに記事を投稿することは可能ですか?
内容は VBAでQiitaに投稿する方法についてです。 >>967
Quiitaの仕様についてはよく知らないしわざわざ自動化することでもないだろう
内容を考えれば自動化するよりも手動で投稿したほうが確実で早い >>966
まだ荒してんのかお前w
いいかげんにしろ無能 何も貢献出来てない者が上から目線とか何の冗談だ。
質問も回答もしないバカ者は完全に荒らしだろ。
どんなに負けたく無いのか知らんが、人のせいにするんじゃなくて技術を持ってない頭の悪さを呪うんだな。 >>966
またアホな事を
教える側が上とか言ってる事を指してるんだよ
お前は馬鹿すぎて議論にすらならない そろそろ次スレ頼む
俺は無理だった
ERROR: このホストはBBx規制中です。- プルダウンリストにて
以下のような表があったとして、
田中 人事 42歳
山本 経理 23歳
佐藤 人事 46歳
・
・
・
以下のようなプルダウンボックス×2を配置します
口 口
左のボックスで部署を選んだら右のボックスに該当部署の人のリストが出て、その右に年齢を出したいです。
普通に検索しても、同じキーが連続してる例しかなく、このようにデータベースタイプでキーが飛び飛びになってる表からキーで検索してプルダウンボックスに反映させるやり方が分かりません、どうやればいいですかる With文で指定したObjectをWith文内で表記する方法はありますか?
ObjectがRangeの場合、 .Offset(0,0) でお茶を濁しておりますが、、
With文内で添字を取るようなObjectのプロパティにアクセスするケース
で躓きました。
PowerShellの $_.nameみたいなものが使えたら嬉しいのですが、、 >>974
ワークシートから検索してコンボボックスに追加していくということなら
表をごっそりRangeオブジェクトでとってきて
ForEachで検索列を手当たり次第見ていって
検索値にヒットしたらコンボボックスにAdd
でご要望通りになるかと あれだな ガキの頃からキーボードカチャカチャやってる世代じゃ無くなって来てるからな
Excelとか、むしろ面倒なんだろな そおゆう世代向けのUIというか操作に変えてかなきゃ
業務も滞ること夥しく成ってくんだろな
Excelの売り方もおかしくなってくし そろそろ潮時かもな
もちろん裏方さんにとってはキーボード必須だろうけど、使う側、数値入れる側にとっちゃあ
タッチじゃないとダメ って時代に突入してんだろな いやはや >>977
すげー! まさに捜していた答えでした。
感謝 >>974
俺の環境が悪いのか、以下のようなプルダウンが四角にしか見えない
>左のボックスで部署を選んだら右のボックスに該当部署の人のリストが出て、その右に年齢を出したいです。
3つ要素があるように思えるけど、実際はどういう風に実装したいの?ペイントか何かでいいのでイメージ画像を作って欲しい >>974
余談だが現在の年齢を表にすると
来年になっても年取らないぞ bomなしのutf-8 csv に出力するコードでbom飛ばすときのposition = 3がパラメータが間違っていますとか言われるんやけどなんでか教えてください! >>983
出力するとき、最初からposition=3ってするの? >>984
.Position = 0
.Type = adTypeBinary
.Position = 3
ってします Adodb.Streamの話だろ。
ちゃんとキーワード入れろや。 >>983
ADOで悩んだ記憶あるけど
オブジェクトをコピーするので逃げた記憶がある あ
空っぽオブジェクトつくって
データだけコピーね(勿論三バイト捨てて) excel vbaでword文書を印刷したいんだけど
「セクション1の余白が印刷可能なページ範囲の外〜」
っていうアラートが出てしまう
disalertでも出ちゃうんだけど良い方法ないかな? >>991
レスありがとう
印刷したいファイルは数十個あるから
手作業での余白調節は難しいんだ
それともそれを自動化すればってこと? csvファイルをエクセルで開いて、xlsxで保管した場合、このファイルを開いてシート操作やセル操作するのは、通常のエクセルファイルとして可能ですか? >>993
シート操作やセル操作をアドインにすればxlsxでも可能です。
つうか、なんでデータベースの出力形式やデータ交換フォーマットってCSVが主なんだろう?
どんなポンコツDBでもXLS出力ぐらいは付いていると思うんだが「データよろしく」
と言うと「じゃあCSVで」と大抵は返される。CSVの意味わかってのかよぉーと叫びたくなるぜ。だって、数字を1000の位でカンマ区切り
とかヨユーでしてやがるからw
「カンマ・セパレーテッド・バリュー」って意味わかんねえのかよこのハゲーっと心の中で絶叫してます。 >>994 >>995 そうですか・・・。今日は開いたファイルのシートを全然認識してくれなくて、非常に困ってます。
BOOKは開いて閉じる操作ができてるので、大丈夫ですが、中のSheet1を全く選んでくれません。 >>995
xls出力が良いとは限らんでしょ。
それに自分はCSVでもセパレータに普通じゃない文字使ってCSV出力機能自体作ったりしてたが。
&H05の文字とか。 >>996
認識ということの意味が分からん。
それにVBAでSheetを選択する処理なんて殆どしないと思うが。
具体的に何がしたいの? >>999 ただ単に VBAで別のブックへコピーしようとして、このファイルのRANGEの範囲を全然選んでくれなくて、
突きつめて行ったら、Sheet1を認識してくれなかったということに気づいて・・・。 このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 72日 10時間 9分 10秒 5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。
───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────
会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。
▼ プレミアム会員登録はこちら ▼
https://premium.5ch.net/
▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php レス数が1000を超えています。これ以上書き込みはできません。