トップページtech
1001コメント341KB

Excel VBA 質問スレ Part37 [転載禁止]©5ch.io

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2015/01/10(土) 07:06:30.56ID:2VZ4g5kC
ExcelのVBAに関する質問スレです

                   ___
       ___      /____ヽ      ____
      /____\    | |´・ω・`| |    /___ヽ
      .l |´・ω・`|  ニX二 . ̄ ̄ ̄  二X二  |´・ω・`| l 俺たちに任せろ
      !、 ̄ ̄ ̄  ヽ   |       |    /    ̄ ̄ ̄/
       ヽ_/ヽ、  ヽ__)  \__/\_/.   /_/  ノヽ_/
             ̄                ̄ ̄

このスレはコード書き込みOKです。
作成依頼もOKですが、作成依頼限定ではありません。

コードが嫌な人は別スレ建ててください。

※前スレ
Excel VBA 質問スレ Part36 [転載禁止]©2ch.net・
http://peace.2ch.net/test/read.cgi/tech/1419718732/

※頭のレスの方でキチガイが束縛テンプレを貼る詐欺行為が前スレまで散見されましたので、十分にご注意ください。
0412デフォルトの名無しさん2015/07/02(木) 20:50:31.63ID:9qb5cWlQ
>>409
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
Dim oMonth As Byte, oYear As Integer, oDate As Date

oMonth = CByte(Left(Sh.Name, Len(Sh.Name) - 2)) + 1
oYear = Year(Date)

If oMonth > 12 Then
oMonth = 1
oYear = oYear + 1
End If

oDate = CDate(oYear & "/" & oMonth & "/" & 10)

If oDate <= Date Then
MsgBox "処理A"
End If
End Sub

ThisWorkbookに貼り付け。
0413デフォルトの名無しさん2015/07/02(木) 21:01:08.22ID:9qb5cWlQ
>>411を読んで「確かにそうだわ」と思って書き直し。

Private Sub Workbook_SheetActivate(ByVal Sh As Object)
Dim oMonth As Byte
Dim f As Boolean

oMonth = CByte(Left(Sh.Name, Len(Sh.Name) - 2)) + 1
If oMonth > 12 Then oMonth = 1

If oMonth < Month(Date) Then
f = True
ElseIf oMonth = Month(Date) Then
If Day(Date) >= 1 Then f = True
End If

If f Then
MsgBox "処理A"
End If
End Sub

12月度が反応しちゃうけど「いつまで反応し続けるか」が条件にないし、年度管理しないとそんなもんかなぁ。
0414デフォルトの名無しさん2015/07/02(木) 21:04:45.30ID:9qb5cWlQ
>>413
あ、Dayの指定をテスト状態から戻して無かったわ。
下から6行目の所、

If Day(Date) >= 10 then f = True

にしといて。
0415デフォルトの名無しさん2015/07/02(木) 21:28:54.52ID:cgPWlYAt
>>411
12月ってのは、当年のなのか?前年または翌年なのか?
当年の12月なら、2016/1/10において12月度(2016/12/11-2017/1/10)はまだ到達してないから
処理が実行されないのは正常だよね
当年度の12月というのであれば、当日が4/1以降かどうかで当年か前年か切り替えないとダメだろう(年度切り替えが4/1だとして)
0416デフォルトの名無しさん2015/07/02(木) 21:39:28.39ID:R9hbfqH1
ブックに対象年度の情報がなければ正確な処理は論理的に不可能です
0417デフォルトの名無しさん2015/07/02(木) 21:59:38.14ID:cgPWlYAt
>>416
対象の年度が何らかの方法で確定できるなら、ブックに対象年度が無くても理論的には可能です
たとえば
対象の年度は現在の年度とし、現在の年度はPCの操作時の日付より確定できるときとかな
まあ、対象年度の情報はいらないが、年度に関する何らかの情報は必要かもしれんが
年度確定のための情報(年度開始日)とかな

つか俺VBAの話一切してないなw
0418デフォルトの名無しさん2015/07/02(木) 22:22:25.92ID:R9hbfqH1
>>417
それはまた随分非論理的な理論ですね。
どこかで発表されているのでしょうか、その理論は?
0419デフォルトの名無しさん2015/07/02(木) 23:49:36.87ID:PhnYLcQw
>>416
うん。俺も無理だと思った。
頭が決まってないんだから、何をもって年が始まったばかりなのか、
1周して来たのかを確定出来ないと思う。
0420デフォルトの名無しさん2015/07/03(金) 00:18:24.08ID:xQFZnjt9
どうせbook名に2015とかついてるだろうからそこから取得すれば?
0421デフォルトの名無しさん2015/07/03(金) 08:21:48.74ID:zaw8UGxR
>>420
もうそういう反吐の出るような作り方してる奴は無視でいいよ。
0422デフォルトの名無しさん2015/07/03(金) 10:14:07.01ID:bMlB0lVi
>>420
そういう解決法はありありだと思うけどなぁ。
シート名に情報入れといて抜き出すとかも。
0423デフォルトの名無しさん2015/07/03(金) 10:48:31.53ID:tIDo5nwi
マクロと一緒のディレクトリにテキストファイル置いて
「2015」とか書いて読み取るとか。
0424デフォルトの名無しさん2015/07/03(金) 11:10:15.29ID:zaw8UGxR
>>422
ドキュメントプロパティを使えよ・・・ブック名なんていい加減なもの使わないで。
0425デフォルトの名無しさん2015/07/03(金) 12:22:12.36ID:xJ8vVgP9
ファイル名は確実なアイデンティティだぞ
0426デフォルトの名無しさん2015/07/03(金) 12:26:17.84ID:vPK10GoB
別なページに「2015」って年度入れると、
その年度の月度毎のテーブル作るようにしといて、
他のページはそこを参照させるとかなら簡単、というかメンテしやすい

まあ、ページ開くとマクロ実行なんてオレは実装しないんで良いけど
0427デフォルトの名無しさん2015/07/03(金) 13:20:39.05ID:bMlB0lVi
>>424
ドキュメントプロパティの読み込みは時間かかるからね。
例えば、1000ファイルの中の処理対象100ファイルを特定するのに、Dir.glob()系の機能で
探した方が高速でしょ。

ドキュメントプロパティにしか情報が無いと、全ファイルをオープンしないと、処理対象が
わからない。

それと、hoge_2015.xlsxというファイルをコピーして2016年用のファイルを作るとき、大抵の
人ならhoge_2016.xlsxというファイル名にするはず。
ドキュメントプロパティに設定しないといけないなんて、思いつく人はほとんどいない。

ただ、ドキュメントファイル内のメタデータを活用できるツールを使ってるなら、ドキュメント
プロパティは積極的に使うのがいいと思う。
0428デフォルトの名無しさん2015/07/03(金) 14:04:17.97ID:R//i/7GN
>>422
同意
ただし、速度とかじゃなくて、大抵の利用者にとってその方が簡単で、分かりやすくて、間違いにくいから
データ量が多いなら >>423 とかもあるけど年号程度ならファイル名で充分
ドキュメントプロパティとか言ってる奴は自称℃玄人の臭いがする w
ユーザーに触らせないちょっとした設定とかを置くにはいいんだけどね
0429デフォルトの名無しさん2015/07/03(金) 14:05:48.12ID:R//i/7GN
>>408
>>402 に比べれば >>399 の方がより具体的だろ?
0430デフォルトの名無しさん2015/07/04(土) 13:21:08.55ID:U38uGtdG
しょうもないけど分かりやすいソリューションは生き残る
0431デフォルトの名無しさん2015/07/04(土) 14:34:10.54ID:WvwJxr10
>>424
次にお前は「コピペしたままプロパティ修正漏れの犯人誰だ!? コロセ」という
0432デフォルトの名無しさん2015/07/04(土) 14:47:41.85ID:n+Lf90L5
コピペしたままプロパティ修正漏れの犯人誰だ!? コロセ


はっ!!
0433デフォルトの名無しさん2015/07/04(土) 19:49:31.36ID:CDSb/b0p
居たぞ!あいつだ!
撃てー!!
0434デフォルトの名無しさん2015/07/05(日) 01:16:07.81ID:YU79Y+KK
Dim myCell As Range
myCell = ThisWorkbook.Worksheets("Sheet1").Range("A1")

このような記述の後は、その都度ブック名やワークシート名を明記しなくても、
myCellがThisWorkbookのSheet1のA1セルであることは保証されますか?
つまりブック名やワークシート名を省略しても大丈夫でしょうか?
0435デフォルトの名無しさん2015/07/05(日) 01:42:12.25ID:SLIL1g2F
Dim myCell As Range
Set myCell = ThisWorkbook.Worksheets("Sheet1").Range("A1")
これで大丈夫
0436デフォルトの名無しさん2015/07/05(日) 03:20:04.46ID:YU79Y+KK
>>435
ありがとうございました。
0437デフォルトの名無しさん2015/07/05(日) 09:04:41.96ID:vbphD8dy
あるアプリケーションソフトで
データファイルを与えたらそれを分析して画像ファイルとして出力してくれるものがあるのですが
これらの操作をVBAのコードで書いて自動化することはできますか?
0438デフォルトの名無しさん2015/07/05(日) 09:08:34.05ID:vbphD8dy
「データファイルを与えたらそれを分析して画像ファイルとして出力」の部分は
本来ならそのアプリケーションを立ち上げた状態で
ファイル(F)→開くで開いて、そのアプリに特有な操作(といってもツール→出力みたいな操作)をしないといけません。
0439デフォルトの名無しさん2015/07/05(日) 09:09:42.08ID:vbphD8dy
つまりVBAで
・あるアプリを開く
・そのアプリを操作する (メニューバーからの選択だけのわりと単純)
のコードは書けますか?
0440デフォルトの名無しさん2015/07/05(日) 09:28:22.63ID:ayYTjQLc
>>439
コマンドラインからの操作ならWScriptを介せば出来る。ただそのソフトからの出力を直接受け付ける事は出来ない。
0441デフォルトの名無しさん2015/07/05(日) 09:50:10.08ID:vbphD8dy
>>440
ありがとうございます。
ところでWScriptとはなんでしょうか?
出力はそのソフトが勝手にファイルを作ってくれるなら大丈夫でしょうか?
0442デフォルトの名無しさん2015/07/05(日) 11:30:21.63ID:XIvEwRaJ
Windows Script Host (WSH)

VBScript (VB)か、JScript (JavaScript)で、
プログラミングする
0443デフォルトの名無しさん2015/07/05(日) 14:55:03.32ID:CZs4iz8t
)))))))))))(´・ω・`)b
04444442015/07/05(日) 14:55:29.29ID:CZs4iz8t
444げっち(´・ω・`)b
0445デフォルトの名無しさん2015/07/07(火) 06:53:14.99ID:N5IK5nOl
質問です

今VB6でExcelのシートを追加して一覧を作成する処理を作ってるんですが
BookやSheetを扱うときはBookやSheet用の変数を用意してそれを使って
最後に必ず解放しないとメモリにゴミが残ると聞きました

RangeやCellsもそうしないとだめですか?
0446デフォルトの名無しさん2015/07/07(火) 08:28:55.91ID:xJTxnmtV
適当に解放は不要だと言ってみる
0447デフォルトの名無しさん2015/07/07(火) 12:33:14.63ID:L2fl7GI9
>>435
Sheet1.Range()ってやればいいのに、なんでworksheets()ってやる馬鹿が多いの?
シート名変えたら動かなくなっちゃうじゃん。
0448デフォルトの名無しさん2015/07/07(火) 12:34:16.38ID:IXfNO3Pf
シート変えても動くようにするためでしょ
0449デフォルトの名無しさん2015/07/07(火) 12:35:47.32ID:4626lywF
>>447
オブジェクト名変えたら動かなくなっちゃうじゃん
0450デフォルトの名無しさん2015/07/07(火) 12:38:02.42ID:L2fl7GI9
>>448
はw?
シート変えるなら
Sheet2って変えればいいだけでしょ、

コレクションで指定だと、存在しないシート指定してたら実行時までエラーがわからんぞ。
コンパイルで弾くようにしろって。
0451デフォルトの名無しさん2015/07/07(火) 12:40:05.65ID:L2fl7GI9
>>449
オブジェクト名変えたら動かなくていいんだよw
シート名変えて、コードないの変えるべきとこ変えないで動いてる方が問題だろw
0452デフォルトの名無しさん2015/07/07(火) 12:41:29.85ID:L2fl7GI9
動的って条件がなかったな。
そういう条件があればそれでいいよ
0453デフォルトの名無しさん2015/07/07(火) 12:42:58.35ID:L2fl7GI9
でも、この場合Sheet1をベタ打ちしてるんだからSheet1しか参照しないだろ
0454デフォルトの名無しさん2015/07/07(火) 12:43:24.00ID:4626lywF
>>451
落ち着いて自分のレス読み直してみろ
0455デフォルトの名無しさん2015/07/07(火) 12:46:45.79ID:L2fl7GI9
>>454
Sheet1って指定しときゃシート名変えても動くのしらなかった?
名前経由じゃなくてオブジェクトを直接参照してるって仕組みわかってる?
0456デフォルトの名無しさん2015/07/07(火) 12:46:47.13ID:4626lywF
まあ、そんなもんはどっちでも良いんだよ。
本当に問題があるのは、こうでなければいけないっつー凝り固まった頭。
0457デフォルトの名無しさん2015/07/07(火) 12:48:12.35ID:L2fl7GI9
>>456
学習能力がないっていうんだよ。そういうの。
プログラムに関心がないならそう言えばいいじゃん。
0458デフォルトの名無しさん2015/07/07(火) 13:48:16.88ID:xJTxnmtV
プログラムには関心があるのでMSの仕様は積極的に無視していこうぜ!
0459デフォルトの名無しさん2015/07/07(火) 16:38:29.00ID:qt5SIPya
そりゃ、Sheet1ってのはオブジェクト名であって、シート名じゃないからな
まあシートのオブジェクト名わざわざ変えるやつはそうそう居ないだろうけど
シートのオブジェクト名変えてもWorksheetsなら動くけど、Sheet1だと動かなくなるぞ
0460デフォルトの名無しさん2015/07/07(火) 18:55:06.01ID:L2fl7GI9
>>459
コンパイルエラーと実行時エラーを同じエラーで済ますのならこれ以上話すことはないです。
0461デフォルトの名無しさん2015/07/07(火) 19:05:50.43ID:PadiFETB
結局のところ、俺の中では
Worksheets(Sheet1.Name)って指定してやることで落ち着いた
0462デフォルトの名無しさん2015/07/07(火) 19:14:05.52ID:C/6MhKU5
thisworkbook以外のブックのsheet1オブジェクトってどうやって参照すんの
0463デフォルトの名無しさん2015/07/07(火) 19:22:06.93ID:kLzThONO
エクセルのシートってマクロ実行中でもユーザーが削除出来ちゃうんだぜ
怖いよねこれ
0464デフォルトの名無しさん2015/07/07(火) 21:04:00.08ID:ng2chkeI
設定シートとか、原本シートならオブジェクト名分かりやすいのにいつも変えてるわ
それ消されたら、プログラム自体動かなくなるんだし
あとworksheets("名前")って自動メンバ表示されないよね
いっぱいworksheets("名前")って書いてあると、間違えたりしないのかなと気になる
書き方って人それぞれなんだとは思うけど
0465デフォルトの名無しさん2015/07/07(火) 22:17:02.95ID:kLzThONO
シートを特定するコードはいっぱい書くものじゃないよ
0466デフォルトの名無しさん2015/07/07(火) 22:18:48.65ID:RkSJtY+g
>>455
おれは知ってるけど
sheet1だの2だの連番だと分かりにくいから名前指定する派
オブジェクト名わざわざ変えるのもメンドイし

シート名を変えるとプログラム動かなくなるから
変えないでねって、禁止すればいいだけの話
ユーザーが勝手にシート名変えられると、
統一感無いシート名になるから嫌だ
パートのおばちゃんとか変なシート名つけるんだよ
全角半角混在とか
0467デフォルトの名無しさん2015/07/07(火) 22:19:51.01ID:XzarvOcj
>>462
ThisWorkbookから別のブックを開いて参照するのなら以下の方法
手操作などで別途開いてあるブックを参照する方法はわからん

Dim bk1 as Workbook
Set bk1 = Workbooks.Open(ブックを開くための各種パラメータ)
これでブックを開く
あとは
bk1.Sheets("sheet1")で参照する
0468デフォルトの名無しさん2015/07/07(火) 23:01:33.41ID:L2fl7GI9
>>466
置換しろ。初心者か
0469デフォルトの名無しさん2015/07/07(火) 23:37:06.41ID:ZBt1Rm7d
>>466
あなたの主張の本質と関係ないところで悪いけど、データじゃなくて名前だろ?
全角半角混在なんて何も悪いことはないと思うよ。
0470デフォルトの名無しさん2015/07/08(水) 00:27:04.34ID:MD3q7WpQ
コードのリファクタリングで置換とかそれマジで言ってるの
0471デフォルトの名無しさん2015/07/08(水) 01:35:24.93ID:Jtek8cfL
そんなのリファクタリングと呼べるのか?
0472デフォルトの名無しさん2015/07/08(水) 05:58:09.06ID:dAdTeSHa
VBA弄れるヤツじゃないと修正出来ない様なエラー出しても問題ない環境ならオブジェクト名を直に選択してもいいだろうけど、
普通、VBA使うような職場だったらメッセージ出して素人でも修正可能な状態に出来るWorksheets()を使うだろうなぁ。
0473デフォルトの名無しさん2015/07/08(水) 06:36:39.00ID:20FcS8oh
>>469
シート名も本質的にはデータだよ
0474デフォルトの名無しさん2015/07/08(水) 06:48:28.72ID:6TnygTyi
>>473
であればデータ型は文字列なんだから文字列として許されるものならなんでもいい
0475デフォルトの名無しさん2015/07/08(水) 06:57:00.68ID:z3zUBBg1
>>473
視覚的に認識しやすいから名前は重要だ
Sheet1って書いてあって何を示すのかはわからないだろ?
そりゃ名前つけたくなるだろ
パートのおばちゃんが正しい

Sheetの左隅にでもルール上の連番アンカ文字列つけて
それを見て判定する様な処理を追加すれば解決する
重複は検出してエラーではじく
0476デフォルトの名無しさん2015/07/08(水) 07:19:46.04ID:Jtek8cfL
Sheet1と言うのは例えだと思うよ。

どんな作りにするかは、個人で組むなら何でもありだろうけど、
仕事なら社内での取り決めありきじゃないの?

シートの横っちょにアンカー文字付けてたって、
何のゴミだこれと思って消しちゃうパートのおばちゃんだっているかもよ。
0477デフォルトの名無しさん2015/07/08(水) 07:27:05.60ID:b3kmvtlv
ブックもシートもSetしてから使うもんだろ
基本中の基本
個人的には、小規模ならWithでも可としてる
0478デフォルトの名無しさん2015/07/08(水) 07:55:49.21ID:Jtek8cfL
>>477
なんで直接弄らないで変数に一度入れないといけないの?

基本中の基本が分からなくてごめん。
でも本当に分からないから教えて下され。
0479デフォルトの名無しさん2015/07/08(水) 08:02:24.36ID:20FcS8oh
>>475
そんな面倒なこと考えなくても重要なデータはプロテクトかければいいんだよ。

シート名は重要だからこそ、パートのおばちゃんにへんてこな名前に変えられないように
してあげるのが優しいやり方。
そもそも、基本的にマクロを含むエクセルファイルはプロテクトをかけるべきだね。
0480デフォルトの名無しさん2015/07/08(水) 10:11:14.20ID:G6HCaUBj
他人に使わせるという発想!
0481デフォルトの名無しさん2015/07/08(水) 11:28:53.11ID:NFLl29uw
至急!
Officeアップデートしたら使えなくなったよ。KB2596787かKB2920794だと思うけど。その後すぐにMicrosoft.NET Framework3.5.1の更新もあてて、最新状態だけど動かない。

「'CommandButton1'コントロールは作成されていないため、デザインモードを終了できません。」と出てきてvbaが動かないよ。

助けて
0482デフォルトの名無しさん2015/07/08(水) 12:13:25.57ID:Fjn1PRGp
>>477
なぜ、Setするのが基本なの?

set ws = thisworkbook.worksheet(sheet1.name)

は 結局sheet1と等価なものなのに。
0483デフォルトの名無しさん2015/07/08(水) 12:19:49.04ID:HWq2i8Xl
ヨソ様に使って戴くという謙虚な慎み深さ!
0484デフォルトの名無しさん2015/07/08(水) 15:53:22.41ID:HMKJDSG5
>>481
それ、最近まで有名になってた問題じゃんww

とっくに解決策でてるよ
0485デフォルトの名無しさん2015/07/08(水) 18:53:12.84ID:pxdeghu8
forguncyっていうアプリ気になるんだけど使ってる人いますかね
VBAでDBに接続して、出力するセルを指定して
既存の帳票にデータを表示するのが面倒臭くなってきたし
何よりweb化できるっていうのが気になる
0486デフォルトの名無しさん2015/07/08(水) 19:44:47.46ID:dAdTeSHa
>>482
Set WS = ThisWorkbook.Worksheets("Sheet1")

はSheet1と等価じゃないから。
というかこの話が分からないのはVBA触ったことないヤツだけだろ。
0487デフォルトの名無しさん2015/07/08(水) 20:42:07.16ID:20FcS8oh
俺はどっちかというと等価派だな
0488デフォルトの名無しさん2015/07/08(水) 20:46:23.12ID:PAkk6Hqa
>>486
等価でない理由を教えてちょーだぁ〜
0489デフォルトの名無しさん2015/07/08(水) 22:13:57.79ID:NCKypISk
質問。
小数点がピリオドじゃない言語圏で、小数を含む文字列を安全に数値に変換するとしたらどんな方法があるでしょうか。
同じソフトを流用したいのだけど、おフランスだと小数点がカンマなんだよね。。。
0490デフォルトの名無しさん2015/07/08(水) 22:45:14.03ID:85bEY6Fg
カンマをピリオドに置き換えちゃえばいいんでね?ダメかな?w
0491デフォルトの名無しさん2015/07/08(水) 23:40:21.27ID:FO1XXzvv
>>489
オプションで小数点記号と桁記号を変更できるから
おフランス式に設定した後に
=value("123.456,789")
でいいんじゃないかい
0492デフォルトの名無しさん2015/07/08(水) 23:43:19.85ID:Czg0GgmD
>>486
等価かわからないけど、こう書く派。
後から読んでわかりやすいから。

ま、書きたいようにかけ。
規約があるなら則れ。
0493デフォルトの名無しさん2015/07/08(水) 23:52:44.95ID:oZ2b660+
マジックナンバーや設定値は、プログラム中に書かずに、外部ファイルから読み出せよ。
おれは面倒だから、設定値記入用のワークシート(これだけは名前固定)を用意しているけどな。
04944892015/07/09(木) 00:41:06.11ID:AOeRDpks
ありがとうございます。

>>490
じつは自分も最初そう思った。w
でももっと安全な方法もないかな〜とここで質問させて貰いました。
ケースが限定されているので、それでもたぶん大丈夫だとは思うんだけど。

>>491
そんな設定があったのですね。
設定を変えてしまうと影響範囲が大きいかも知れないので、まずそっちを確認してみるです。
‥‥逆に、小数点の情報をプロパティから拾えれば、変換前に双方を置換で済ませられるかも。
0495デフォルトの名無しさん2015/07/09(木) 02:54:43.58ID:Vp2Vvxuo
>>486
=で比較してみろハゲ
0496デフォルトの名無しさん2015/07/09(木) 03:35:26.14ID:JlZfMmHC
>>489
試した事ないからちゃんと動くかどうかは知らんが
CCurとかのCxxx系の変換関数は、国別情報に従って変換するはず
0497デフォルトの名無しさん2015/07/09(木) 03:43:39.04ID:JlZfMmHC
>>495
=で何を比べろと?
Sheet1やWorksheetにデフォルトプロパティはなかったはずだけどなぁ
If Sheet1 = ws とかやれって言ってるの?
そもそもSetされてる変数は参照をもってるわけで
参照となにかが等価ってのがどういう状況の事を言ってるのかよくわからんが

ちなみに
Set ws = ThisWorkbook.Worksheets("Sheet1")
MsgBox ws Is Sheet1
だとTrueって表示されるんだが、これについてはどう思ってるの?
0498デフォルトの名無しさん2015/07/09(木) 04:43:53.99ID:IJ3FUG93
>>488
Worksheetの名前がSheet1である事と、オブジェクト名がSheet1である事は保証されていないから。

特に複数ファイル読み込んでバッチ処理するような時にオブジェクト名を直に指定とかしてたら、
一つでも該当のオブジェクト名が無かったらその度に止まって使い物にならない。
シート名で指定するなら最初に目的のシート名がブック内にあるかどうか探せばエラーを回避できるんで、普通はWorksheets()を使う。

真面目に解説するのがアホらしくなるくらい基本中の基本。

というか今までの流れ見てるとシートに直接コード書いちゃうヤツが結構いるのか。
ワークシートはセルに情報を書いたり消したりする度に容量が増えるから定期的に新しいシート作ってコード全て移すメンテナンスが必要になるぞ。
0499デフォルトの名無しさん2015/07/09(木) 06:09:50.02ID:4VH0pnre
>>497
ああ、演算子の等値比較とか等価比較の事だと勘違いしちゃったんだね。
でも、今は言語のシンタックスを論じてる訳ではないからそういう区別はいらないよ。
普通は、等値=等価という意味で使って問題ない。
0500デフォルトの名無しさん2015/07/09(木) 06:15:21.28ID:0cZHnh39
>>498
>ブックもシートもSetしてから使うもんだろ

と、

>Worksheetの名前がSheet1である事と、オブジェクト名がSheet1である事は保証されていないから。

は、全然関係無さそうな気がするなぁ。どっちも変えられるのこそ当たり前の話だし。

そもそも直接Objectを設定したり、その名前を使うと言うのなら
Objectが無い時点でコンパイルエラー起こすからその場ですぐ判る訳だし。

そこを踏まえて何で基本中の基本なのかもう一度説明して欲しいなぁ。
0501デフォルトの名無しさん2015/07/09(木) 06:32:59.88ID:M1CA7AhU
>>498
シートに直接コードを書くとはどういう意味ですか?
それがよくないのなら、どうすればよいですか?
0502デフォルトの名無しさん2015/07/09(木) 06:58:14.40ID:0cZHnh39
シートのイベントって標準モジュール側でも拾えるんだっけ?
0503デフォルトの名無しさん2015/07/09(木) 07:03:09.36ID:yvZx6GXv
>>502
確かダメ
0504デフォルトの名無しさん2015/07/09(木) 07:22:06.12ID:0cZHnh39
複数のブックを開いて対象のシートを処理するという流れなら確かにシート名から見た方がいいかもね。

でもObjectから指定する場合は自ブックひとつで纏まってるもので、
運用的にシートを削除してはいけない取り決めがあるものなら、
運用から「シート名を変えてはいけない」という規制を外すことができる。

だから最初の設計の時点でどっちにするか決めることで
その前に絶対どっちかに決まることじゃないと思うけどな。

もっともそれはSetを使うのが基本中の基本と言うのとは全く別の話。

Set使わなくてもシート名指定でもObject指定でも使えるからね。
0505デフォルトの名無しさん2015/07/09(木) 08:09:53.67ID:r4sommXw
約5000ページあるwebページを、
30秒以内にすべてコピーペーストすることって技術的に可能ですか?
1ページずつやってたら、一回のコピーペーストで0.5秒くらいかかっちゃいますが
なので一遍にやる事って可能です?
もしくはコピーペーストじゃなくても、内容を更新の度にそのまま転送できる方法とかってあるんですか?

よくなんかの情報サイトとかで、
一分一秒で一気に更新されてる情報サイトとかありますよね。
ああいうのもプログラムで一遍にやってるわけですよね?


あとIQテストの問題みたいに、あるデータの中にある規則性を発見させる事って技術的に可能ですかね?
プログラムを書く自分が答えをわかってなくても、です。
人工知能の領域に入っちゃいますかね?

例えば
●●●?●●●

この?に入るものは何か(答えは●)
って時に
予めプログラムで●って入力してれば、この問題が出た時に●って入れるんでしょうけど
一切自分答えがわからなくても、コンピュータが自分で計算して●って答えを出してくれるような感じです。


例えば将棋のソフトなんて、作ってる人は将棋の初心者程度の実力しかなかったりっていいますよね。
にも関わらず、人間より強いソフトを作ったりしますよね。
チェスやオセロなんか、人間をはるかに超えてるわけじゃないですか。
0506デフォルトの名無しさん2015/07/09(木) 08:34:48.47ID:n0IdOdTN
シート名が変更されてるケースがあるから >>486 が等価でないと言うのはわかるけど、>>482 へレスしてる意図がわからん
0507デフォルトの名無しさん2015/07/09(木) 08:39:00.10ID:Vp2Vvxuo
>>498
コンパイルって機能しってますか?
基本中の基本ですよ
0508デフォルトの名無しさん2015/07/09(木) 08:50:08.88ID:yvZx6GXv
>>505
webページをコピペする速さと、更新する速さは別の作業を比較しているようで、意味無いんじゃあないのか?
0509デフォルトの名無しさん2015/07/09(木) 09:39:12.22ID:0zCUc4Y+
>>505
機械学習の分野だなぁ
0510デフォルトの名無しさん2015/07/09(木) 10:05:02.59ID:r4sommXw
>>508
どういうことでしょうか?
例えば
ttp://www.chikuwachan.com/live/
これなんかはニコニコ生放送の何千とあるほぼすべての放送のコメント数をリアルタイムで表示しています。
こういうのはどうやってるんでしょうか?
一気に数千窓開いてコピーしたりっていう?

まあこんな感じで一気に数千のデータをリアルタイムで集めてエクセルに記録したいのですが。
可能なんですか?
どういう方法をやってるんでしょうか?

>>509
エクセルのVBAでは無理がありますか?
0511デフォルトの名無しさん2015/07/09(木) 10:08:15.75ID:hn2NpzTq
Excelのwebクエリでできなきゃ諦めろん。
■ このスレッドは過去ログ倉庫に格納されています