Excel VBA 質問スレ Part34
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2014/06/28(土) 08:24:45.78ID:CYmFK5pL___
___ /____ヽ ____
/____\ | |´・ω・`| | /___ヽ
.l |´・ω・`| ニX二 . ̄ ̄ ̄ 二X二 |´・ω・`| l 俺たちに任せろ
!、 ̄ ̄ ̄ ヽ | | /  ̄ ̄ ̄/
ヽ_/ヽ、 ヽ__) \__/\_/. /_/ ノヽ_/
 ̄  ̄ ̄
このスレはコード書き込みOKです。
作成依頼もOKですが、作成依頼限定ではありません。
コードが嫌な人はこちらのスレへ
http://toro.2ch.net/test/read.cgi/tech/1381151995/l50
※前スレ
Excel VBA 質問スレ Part33
http://peace.2ch.net/test/read.cgi/tech/1382015080/
0002デフォルトの名無しさん
2014/06/28(土) 18:38:16.95ID:EodHiYJU★1 質問テンプレ(雛形)は用意しませんが、OSとExcelのバージョンは必ず書きましょう。
★2 ExcelのVBA以外の部分に関する質問はNGです。
但し、VBA無しでも出来ることだが、あえてVBAでやりたいって物に関してはOK。
★3 ExcelのVBE(Visual Basic Editor)を使うとしても、VBAの分野以外に関してはスレ違いです。
VBAとは、『Visual Basic for Applications』の略で
Application
├Workbooks
|└Workbook
| ├Worksheets
| |└Worksheet
というApplication以下のオブジェクトを、VB言語で操作するものを指します。
例えExcel付属のVBE(Visual Basic Editor)を利用しようとも、このApplication以下のブックやシート、
セルやオブジェクト等を操作するもの以外はVBA分野の話ではないので、ここでは聞かないでください。
★4 とりあえず、Excelのインスタンスを作らずにVB6で出来ることは全てスレ違いだと思ってください。
★5 レベルはどうあれ、ここはプログラマ用の板スレです。プログラマとは、自分でプログラムを組み、
コードを書く人の事なので、自分でやるきは全く無く、丸投げしようって人はお断りです。
ヒントを貰えばあとは自力でなんとかしますって人のみどうぞ。
★6 わからなければとりあえず「マクロの記録」(Alt, T, M, R)
0003デフォルトの名無しさん
2014/06/28(土) 19:16:33.29ID:vnVg5isx誰かがマイルールで勝手に作って貼っているだけなので無視して下さい
0004デフォルトの名無しさん
2014/06/28(土) 19:45:39.65ID:CYmFK5pL>>1をよく読め。
そしてお前はまずPart32を埋めてこい。
0005デフォルトの名無しさん
2014/06/28(土) 21:05:43.43ID:x8pWVUAe>>2の中でも
★1 質問テンプレ(雛形)は用意しませんが、OSとExcelのバージョンは必ず書きましょう。
だけはやってくれた方が回答する側もやりやすい。
だけど他は無視して良いよ。
質問者の態度が気に食わないとかの理由で答えたくないヤツは
回答せずにスルーすれば良いんだから。
答えたいヤツが答えることまで個人的ルールを盾にして禁じるなんてのは
余計なお世話だ。
0006桃白白 ◆9Jro6YFwm650
2014/06/29(日) 08:43:58.59ID:brJxynPM0007デフォルトの名無しさん
2014/06/29(日) 20:09:04.86ID:vHu5Qjdi必死すぎw
0008デフォルトの名無しさん
2014/06/29(日) 20:16:11.68ID:0+H85njYむしろ>>2が必死すぎ
こっちのスレがウザイテンプレ抜きにして上手くいってんのが
よほど悔しいとみえる
0009デフォルトの名無しさん
2014/06/30(月) 08:52:19.10ID:1+6mRIRO処理系によっても異なるので、思い込みバグの元になる
試行錯誤で裏技テクニックを発見するのはいいけど、そういうのは大々的に使うべきじゃない
この危険性が理解できない人は、それこそプログラミングに向いてない
0010デフォルトの名無しさん
2014/06/30(月) 12:35:31.49ID:sL6k3OgI>1+1の結果はドキュメントに明示されてない(保証されてない)から
2にならないことがあるって事?
0011デフォルトの名無しさん
2014/06/30(月) 12:47:45.34ID:DNhhFBBa0.1を10回足しても1にならないとか、初心者は必ず混乱する
0012デフォルトの名無しさん
2014/06/30(月) 13:22:45.22ID:f17tdAtr>>9が書いてるのは隔離スレPart32での1000のパロディー
0013デフォルトの名無しさん
2014/06/30(月) 17:12:05.56ID:0nWL9M6a0014デフォルトの名無しさん
2014/07/01(火) 05:56:47.96ID:mubpqKNeパロディーではあるが、歴とした>>9自身の主張でもある
パロディー風に書けば、間違った事書いても、指摘や反論は免れるなんて決まりは無いからね
コピペや引用なんかでもそうだが、何かを投稿するってことは、その内容を最初に考えたのが投稿者じゃなくても
その内容に同調や同意しているってことになるから、その内容は投稿者の意見や主張でもあるってことになるので
コピペだから、パロだからといって、指摘や反論を小馬鹿にしたり躱そうとするするのは、
本人なら卑劣な逃げ、他人なら的外れな茶々ってことになる
まあ、元から破綻した内容を楽しむネタコピペを改変したものなら、破綻を指摘されても
「これは元から破綻っぷりを楽しむものですから」って言い分はありかもしれないけど、>>9の元はまともな内容なので、
パロディー化して破綻した内容になったなら、その破綻はパロディー元ではなく>>9主張が間違ってることに起因するからね
0015デフォルトの名無しさん
2014/07/01(火) 07:39:47.71ID:/AUZGirl元ネタがまともだと思ってる時点でお察しですな。
あれは、それだけを読めば特に間違ってはいないんだけど、
話の流れからいったらバカ丸出しの発言だったんよ。
(論点がずれてた)
0016デフォルトの名無しさん
2014/07/01(火) 12:54:50.64ID:Na3PDdXv0017デフォルトの名無しさん
2014/07/01(火) 13:22:24.29ID:rAfyooRv隔離スレの話題をあんま引っ張るのもどうかと
同じスレタイトルで こっちが本スレで
あっちが隔離スレって言われるてるか考えるともうね
あっちでやって て感じだよ
0018デフォルトの名無しさん
2014/07/01(火) 21:16:33.87ID:aaK0kqTrAの列に様々な桁の数字が並んでいます
その数字の中で8桁の数字だけ下3桁の数値にしたいのです。
そしてその列のセルの値が何も無くなった時に止めるようにしたいのですが・・・
この場合どのようにすればいいでしょうか?
Do〜Loop で条件を「○桁の時に」とすると桁が変わってループが止まるので困っています
windows7でEXCEL2003です。
0019デフォルトの名無しさん
2014/07/01(火) 21:27:08.30ID:aaK0kqTrすみません「○桁の時に」 = 「8桁の時に」
です。
0020デフォルトの名無しさん
2014/07/01(火) 21:31:44.24ID:c88Zrj/01
123
1234
…
12345678←これを678にする
空白
↑こういうこと?
DO
0021デフォルトの名無しさん
2014/07/01(火) 21:33:46.75ID:c88Zrj/0すまん途中で書きこんじゃった
A
1
123
1234
…
12345678←これを678にする
空白
↑こういうこと?
俺も覚えた手だけど、DO〜LOOPってDO Whileみたいな仕様なら
実行後に判定するからループ止まるんじゃないの?
FOR文で回してIF で桁数変更したほうがいいんじゃない?
0022デフォルトの名無しさん
2014/07/01(火) 21:56:11.46ID:/AUZGirlそのブックのシート1(シートタブが一番左のシート)で
A列を上から順番に調べて、「セルの値が数値」で、かつ「長さが8桁」のときに
そのセルの値を1000で割った余り(つまり下3桁)をそのセルに書き込む
条件に合わなければその行をスルー
次の行へ、
セルが空白だったら終了
という動作をするマクロ
ただし、全ての数字が整数である前提で組んでますので、
小数が混じってると上手く動作しません
Sub test()
Dim rw As Long
With ThisWorkbook.Sheets(1)
rw = 1
Do
If .Cells(rw, 1) = "" Then Exit Do
If IsNumeric(.Cells(rw, 1)) Then
If Len(.Cells(rw, 1)) = 8 Then
.Cells(rw, 1) = .Cells(rw, 1) Mod 1000
End If
End If
rw = rw + 1
Loop
End With
End Sub
0023デフォルトの名無しさん
2014/07/01(火) 22:25:24.05ID:Jua//xVovbRedやvbBlueの他にも
たくさんの定数があったように思いますが
それらはどう記述しますか?
オレンジ色、紫色、ゴールド、ぐんじょう色などなど、かなりあったように記憶しているのですが。
0024デフォルトの名無しさん
2014/07/01(火) 22:32:10.01ID:Jua//xVoみなにも情報を共有しとくよ。
オレンジならrgbOrangeみたいにrgb+色の英単語でok
大人気のわたしのホームページは
http://msdn.microsoft.com/ja-jp/library/office/ff197459(v=office.15).aspx
002518
2014/07/01(火) 22:50:38.16ID:aaK0kqTrレスありがとうございます。
そう書いた方が判り易かったですね。
ずばりそういうことです。
私もIFでやってみました。
LenとRightを使用し条件と処理をさせて
ループをForで以下のようにしました。
For i = 1 To 100
If Cells(i, 1) = "" Then
i = 100
一応動作してますけどこのような止め方でいいのでしょうか?
0026デフォルトの名無しさん
2014/07/01(火) 22:53:28.97ID:/AUZGirlそれでもいいですけど、
For Nextループから抜け出すなら
If Cells(i, 1) = "" Then Exit For
が一般的だと思いますよ
0027デフォルトの名無しさん
2014/07/01(火) 22:54:11.72ID:CqL4nbrBだめ
方法はいろいろあるけど、適切な例の一つ
r = 1
Do While Cells(r, 1) <> ""
3桁化の処理
r = r +1
Loop
002818
2014/07/01(火) 22:59:58.38ID:aaK0kqTrなるほど
そういう書き方があるんですね。
勉強になります。
基本的な事しか判らないのでこんな方法で表現できるのにびっくりです。
もっと勉強しようと思いますありがとうございます。
0029デフォルトの名無しさん
2014/07/01(火) 23:07:55.67ID:aaK0kqTr>>27
なるほど。そうやって止めるのが正解なんですね。
経験が無く応用も効かないので判らないでいました。
さっそく使わせて頂きます。
ありがとうございました。
0030デフォルトの名無しさん
2014/07/02(水) 02:41:17.64ID:Dxc+vPNX(Excel2000 以上で動作してほしい)
(Excel2000 ないから Excel97 でトライ中)
Private WithEvents App As Application
Private Sub App_WorkbookBeforeClose(ByVal Wb As Excel.Workbook, Cancel As Boolean)
・・・・・・
End Sub
とかで
他ブックのイベントを拾う事ができますが
BeforeCloseではなく他ブックが完全に閉じた事をイベントで拾う事はできないでしょうか?
自分自身を参照設定してるブックが無くなったらCLOSEしたいのです。
(ホンネは
参照設定してるブックが開いたら自動オープンするんだから
参照設定してるブックが閉じたら閉じてほしい所)
BeforeCloseでそれをやると
「現在このブックは他のブックから参照されているため,閉じることはできません。」
まあ当然ですが
003130
2014/07/02(水) 04:27:10.80ID:Dxc+vPNX参照設定される側でなんとかしようと
自分でも色々ぐぐってたけど 無理そうなんで
アプローチ変えて 参照設定する側で対策する方向で 今実験してるけど
オープン時に 参照設定追加して クローズ時に設定解除するようにする事で
解決しそうです。
なので 質問取り下げます お騒がせしました ごめんなさい
0033デフォルトの名無しさん
2014/07/02(水) 07:15:03.96ID:SuduICFH恥ずかしすぎw
0034桃白白 ◆9Jro6YFwm650
2014/07/02(水) 07:17:18.36ID:TNx19tqM/⌒ ⌒\
/( ●) (●)\
/ ::::⌒(__人__)⌒:::: \
| |r┬-| |
\ `ー'´ /
> <
( | / )
`| /'
| r /
ヽ ヽ/
>__ノ;:::......
0035定期統計資料
2014/07/02(水) 07:50:39.40ID:DiScokhV★zipファイルの「阪神京阪無」ディレクトリ以下
「平成26年4月」の数値未発表で一部合計値比較不可能の為
平成26年3月〜平成13年4月は以下路線の各駅を合計・増減から除外して再計算。
「京阪」─「本線」「中之島線」
「阪神」─「本線」「なんば線」
★zipファイルの「阪神京阪有」ディレクトリ以下
除外せず、「平成26年4月」の未発表数値を前年同月と同一と仮定
※「Hnn(年度)」…平成(nn-1)年4月〜平成nn年3月
※「中之島」「渡辺橋」「大江橋」「なにわ橋」…「H21」10月の[総数]は日割り(13/31日) 。
※「大阪難波」「桜川」「ドーム前」「九条」…「H21」3月の[総数]は日割り(12/31日) 。
※「総数」…「H18」の7月以降及び年度平均はOTS線を除いた数値となっている。
平成24年4月〜平成26年4月
http://www.city.osaka.lg.jp/toshikeikaku/page/0000020916.html
[2014年6月30日]
http://www.city.osaka.lg.jp/toshikeikaku/cmsfiles/contents/0000020/20916/6-2.xls
平成25年3月〜平成13年4月
http://www.city.osaka.lg.jp/toshikeikaku/page/0000164566.html
[2014年5月27日]
http://www.city.osaka.lg.jp/toshikeikaku/cmsfiles/contents/0000164/164566/12-6.xls
0036桃白白 ◆9Jro6YFwm650
2014/07/02(水) 21:39:14.83ID:TNx19tqM(; ・`д・´) な、なるほどね(思考停止)
0037デフォルトの名無しさん
2014/07/03(木) 02:43:32.81ID:M35dK7YSk
って、なぜ k なんでしょうか?(何かの頭文字?)
気になって夜も眠れません。
0038デフォルトの名無しさん
2014/07/03(木) 03:47:36.59ID:liGccDS8\g の g もなぜだろうねー?て思うけど
スレ違いなので合わせて正規表現スレで聞いてきてくれ
0039デフォルトの名無しさん
2014/07/03(木) 08:14:27.30ID:wxwXyXefまたExcelのWindowのほうにactiveをうつしたいんだけど、どうする?
0040デフォルトの名無しさん
2014/07/03(木) 09:43:11.60ID:ZDqPh3/H0041デフォルトの名無しさん
2014/07/03(木) 10:13:46.13ID:wxwXyXef0042デフォルトの名無しさん
2014/07/03(木) 11:36:53.35ID:nnmK9CiW0043桃白白 ◆9Jro6YFwm650
2014/07/03(木) 19:49:32.03ID:gqLdubbD(´・∀・)ノ ぁぃ
0044デフォルトの名無しさん
2014/07/03(木) 20:30:19.77ID:erpxq4bc大丈夫だよ、問題ないよ
0045デフォルトの名無しさん
2014/07/03(木) 20:58:53.30ID:qSEJiQtR何の問題もないし、呑みに行こうぜ
0046デフォルトの名無しさん
2014/07/03(木) 22:59:34.20ID:rdvQkZpjSheets("sheet1").PrintOut Copies:=Range("A2").Value
これを使って.xlsの代わりにpdfを印刷したいのですがどうすればいいですか?
0047デフォルトの名無しさん
2014/07/03(木) 23:54:41.78ID:sKt0RrirそのコードのままデフォルトプリンタをPDF仮想プリンタにする
0048デフォルトの名無しさん
2014/07/04(金) 00:05:58.80ID:/0RQ9iAJ0049デフォルトの名無しさん
2014/07/04(金) 00:25:03.37ID:PB6bDjd0http://www.happy2-island.com/excelsmile/smile03/capter00716.shtml
0050デフォルトの名無しさん
2014/07/04(金) 20:39:30.74ID:rrkT7maN普通にfunctionで戻り値返せばいいじゃん。
0051デフォルトの名無しさん
2014/07/04(金) 20:50:26.54ID:FK82BIfrまぁね。確かJavaとかはそんなじゃなかったっけ?
だけどプロパティとメソッドを明確化出来るからいいんじゃないの?
0052デフォルトの名無しさん
2014/07/04(金) 21:22:10.52ID:RpeAMBuDProperty Let
Property Get
これで同じ プロシージャ名を使えます。
つまり
値 取得専用 とか
設定時と取得で別処理させるとか
できるのですよ
ヘルプより
>通常、Property プロシージャは 2 つ 1 組で使います。
>この組み合わせは、Property Let プロシージャと Property Get プロシージャ、
>または Property Set プロシージャと Property Get プロシージャのいずれかです。
>Property Get プロシージャだけを宣言した場合は、値の取得のみ可能なプロパティが作成されます。
0053デフォルトの名無しさん
2014/07/04(金) 21:39:03.62ID:FK82BIfrそれって別にFunctionでも出来るでしょ?
0054デフォルトの名無しさん
2014/07/04(金) 21:47:17.08ID:RpeAMBuDこういう事できたっけ?
Dim Data As Long
Property Let TEST_Property(arg)
Data = arg
End Property
Property Get TEST_Property()
TEST_Property = Data & "/"
End Property
Sub TEST()
'値設定
TEST_Property = 7
'値読み出し
Debug.Print TEST_Property
End Sub
0055デフォルトの名無しさん
2014/07/04(金) 23:25:57.31ID:RpeAMBuDメソッドと 一緒に プロパティとして
オブジェクトに組み込んで使う事が多いと思うんで
使う必要のある 局面は少ないとは思う
0056デフォルトの名無しさん
2014/07/05(土) 02:34:17.66ID:uNQKpKREこういう書き方って出来ましたっけ?
0057デフォルトの名無しさん
2014/07/05(土) 02:57:48.08ID:xSzrfFSo最初のメソッドがオブジェクトを返せば
そのオブジェクトのメソッドが使える
こういう意味のない事も可能だったり(^^
Workbooks.Open("b:\book1.xls").Close
0058デフォルトの名無しさん
2014/07/05(土) 04:35:55.69ID:uNQKpKREオブジェクト以外だとエラーになるんですね
ありがとうございました
0059デフォルトの名無しさん
2014/07/05(土) 07:59:47.17ID:DUAZ7FzQ> こういう意味のない事も可能だったり(^^
ブックの存在確認とかかな
> Workbooks.Open("b:\book1.xls").Close
なんか久々に B ドライブって見たわ
0060デフォルトの名無しさん
2014/07/05(土) 08:55:53.30ID:u2/EtCN+0061デフォルトの名無しさん
2014/07/05(土) 11:04:09.38ID:1SqY6dYcそのせいでわざわざsetして補完聞くようにしてるわ。
0062デフォルトの名無しさん
2014/07/05(土) 11:15:29.62ID:DUAZ7FzQ意味があるかどうかの話で、ペストかどうかは別の話
0063デフォルトの名無しさん
2014/07/05(土) 12:25:02.96ID:ILQB+TND006457
2014/07/05(土) 13:02:28.24ID:xSzrfFSo微妙に誤解してるような してないような
書き方悪かったかな
>そのオブジェクトのメソッドが使える
を訂正して
>そのオブジェクトにメソッドがあれば 使える
とします。
オブジェクトっても色々あるわけで
>>59
そこにツッコミ入れますかw
0065デフォルトの名無しさん
2014/07/05(土) 21:31:52.75ID:fgyLnXmfhttp://ja.wikipedia.org/wiki/Xeon_Phi
http://www.intel.co.jp/content/www/jp/ja/processors/xeon/xeon-phi-coprocessor.html
というXeon向けの60コアあるコプロセッサーボードがあると最近知ったのですが
これを使うとExcelの処理速度が超爆速になったりするのでしょうか?
0066デフォルトの名無しさん
2014/07/05(土) 21:42:46.76ID:ILQB+TNDExcel単体では、それだけたくさんのコアで動作するように設計されていないので何も変わらない
裏で別のアプリが動作している時に影響が出ないってだけ
0067デフォルトの名無しさん
2014/07/05(土) 22:18:09.55ID:DUAZ7FzQVBA はダメっぽいけど、Excel 自体はマルチスレッドに対応してるよ。
60 コアまで有効かどうかは知らんが。
0068デフォルトの名無しさん
2014/07/05(土) 22:35:37.11ID:H4PfIfbhXeon Phi はCPUではなくてGPUのような演算ボードのようで
0069デフォルトの名無しさん
2014/07/06(日) 07:34:38.77ID:WRsZVHJUマジだった
でもセル選択からの書式設定で初回30秒待たされる方をどうにかして欲しい
0070デフォルトの名無しさん
2014/07/06(日) 09:04:23.85ID:0QsWr+IB> でもセル選択からの書式設定で初回30秒待たされる方をどうにかして欲しい
kwsk
0071デフォルトの名無しさん
2014/07/06(日) 10:54:22.78ID:WRsZVHJUセル選択で右クリックして書式選択すると初回のみダイアログ起動にやたら時間かかる
EXCELの遅延初期化とディスクキャッシュの問題かと
0072デフォルトの名無しさん
2014/07/06(日) 11:04:08.29ID:0QsWr+IBそれ新規のシートでもなるんか?
なら、PC 買い換えろとしか言えない。
確かに初回は数秒かかるけど、10秒越えてるのは明らかになんかおかしい。
0073デフォルトの名無しさん
2014/07/06(日) 11:11:56.20ID:0/5ncYP/0074デフォルトの名無しさん
2014/07/06(日) 11:25:02.83ID:svvUNKuj自分で書いたVBAプログラムの無駄を省きすっきりさせたいのですが、入り組んでいて手作業だときついものがあるのです。
そんなツールがない場合には手作業で作ろうと思うのですが、、プログラムに適したフローチャートの書き方ってあるものなのでしょうか?
キーワード的なものを教えていただきたいのです。よろしくお願いします。
0075デフォルトの名無しさん
2014/07/06(日) 11:28:16.81ID:0ko7UgYLと言っても、初心者にはOS入れ直しって敷居が高いらしいからな
慣れてる人は、普段からOSやOS入れてるHDDが突然逝っても困らないようにしてるから
その対策がOS入れ直しの時にも役に立って、OS再インスコなんて大した手間でもないけどね
0076デフォルトの名無しさん
2014/07/06(日) 18:13:03.33ID:o4RIpn+iStr1 = ChrW(&H3042): Debug.Print Str1, Hex(AscW(Str1))
Str1 = ChrB(&H42) & ChrB(&H30): Debug.Print Str1, Hex(AscW(Str1))
Str1 = ChrB(&H30) & ChrB(&H42): Debug.Print Str1, Hex(AscW(Str1))
<結果>
あ 3042
あ 3042
? 4230
となったんですが
ChrB(&Hnn) & ChrB(&Hnn)
とする時には 逆にしないと いけないのは なぜなんでしょうか
そもそも使い方が間違っているのか
何か理由があるのか知りたいでのす。
よろしくお願いします。
0077デフォルトの名無しさん
2014/07/06(日) 18:47:49.33ID:WRsZVHJUそんな使い方出来たんだ、知らなかったわ
UNICODEにはLEとBEがあってVBAはLEだろうから内部的には前後バイトが逆になってるはず
0078デフォルトの名無しさん
2014/07/06(日) 20:00:32.87ID:o4RIpn+iありがとう
UniCode自体は知識として知ってはいたけど
Excelは BEだと 思い込んでた ChrW()の返り値が BEなんだもん
いままではChrW()使っていたけど
クグっていた時に偶然見つけたのです
でやってみたらアレ?って感じで
という事は
内部 :UniCode(Litle Endian)
AscB(),ChrB():バイナリ
AscW(),ChrW():UniCode(Big Endian)
Asc(),Chr() :Shift-JIS(日本語環境時)
という理解でいいのかな?
0079デフォルトの名無しさん
2014/07/06(日) 20:09:25.77ID:JKZH1xqw008076
2014/07/06(日) 20:20:28.44ID:o4RIpn+iうん おもいっきり 混乱してる
で自分で気づいた事
×Excelは BEだと 思い込んでた ChrW()の返り値が BEなんだもん
○Excelは BEだと 思い込んでた AscW()の返り値が BEなんだもん
他に 理解の上で おかしい点ある?
0081デフォルトの名無しさん
2014/07/06(日) 20:33:53.21ID:Q8Jj+bR6それらのメソッドが扱っているのは符号化表現ではなくコードポイントでしょ?(と思ってる)
0082デフォルトの名無しさん
2014/07/06(日) 20:36:46.70ID:JKZH1xqw> Excelは BEだと 思い込んでた
ChrB(&H42) & ChrB(&H30) が 3042 になるのはCPUのアーキテクチャがリトルエンディアンだから
excelやunicodeに依存する話じゃない。
> AscW()の返り値が BEなんだもん
AscW()の返り値はInteger。エンディアンに関係なく数値としては0-65535の値。
008376
2014/07/06(日) 20:52:13.02ID:o4RIpn+iありがと
お二人が言われている事全てを理解できて ないけど
根本的に
>excelやunicodeに依存する話じゃない。
って事なんだろうなとは思った
さすがに
CPUのアーキテクチャ云々は
趣味でVBAを扱っている身としては 考えた事もなかった
0084デフォルトの名無しさん
2014/07/06(日) 21:00:35.71ID:0/5ncYP/メソッド?関数じゃないの?
0085デフォルトの名無しさん
2014/07/06(日) 23:49:54.02ID:v6JPrHa9Ifステートメントでは
Range("A4").Value Range("C4").Value = Range("E4").Value
と記述できたのですが、なにもステートメントもなしに同じように記述すると、「+」がエラーで書き込めませんでした。
Range("E4").Value + Range("A4").Value Range("C4").Value
だと問題なく記述できます。
これはどのような仕組みになっているのでしょう?
0086デフォルトの名無しさん
2014/07/06(日) 23:52:09.20ID:v6JPrHa9Range("E4").Value = Range("A4").Value + Range("C4").Value
0087デフォルトの名無しさん
2014/07/07(月) 00:26:13.07ID:UAdVZ0Fj質問がよくわからない
エラーの出た行と、比較したいプログラムを省略せずに書いて
008885
2014/07/07(月) 00:49:27.67ID:Z2I36dsbSub チェック()
Range("A4").Value + Range("C4").Value = Range("E4").Value
End Sub
このように記述しても、足し算の行を記述した後モジュール内をクリックすると「+」が消えてしまいます。
一方、以下のようなIfステートメント内だと問題なく記述できます。
Sub チェック()
If Range("A4").Value + Range("C4").Value = Range("E4").Value Then
Range("E4").Font.Color = vbBlue
Else
Range("E4").Font.Color = vbRed
End If
End Sub
割り切って「そういうものだ」と覚えればよいのかもしれませんが、よろしくお願いします。
008985
2014/07/07(月) 00:53:07.08ID:Z2I36dsb度々すみません。
0090デフォルトの名無しさん
2014/07/07(月) 00:56:43.05ID:gM0SREJlその二つでは"="の持つ意味が違う
エラーが出ている方は「代入」のための"="
If文に使われてるのは「比較」のための"="
比較のほうは"="の右辺と左辺が同じかどうか
判断するものだから順番は関係ないけれど、
代入のほうは"="の右辺を左辺に代入するものだから順番を逆にすると意味も反対になる。
代入の時には左辺側には演算子は使えない。
0091デフォルトの名無しさん
2014/07/07(月) 01:10:48.79ID:tBZpjBzUIf Range("A4").Value + Range("C4").Value = Range("E4").Value Then
を解釈すると・・・
Range("A4").Value A4セルの値 と
Range("C4").Value = Range("E4").Value という比較演算結果 を足して、
ゼロ以外なら真、ゼロ以外なら偽という分岐をします。
比較演算結果を計算に使うとき真なら−1、偽なら0です。
決して、A4セルの値とC4セルの値を足したものがE4セルの値に等しいか
どうかの判断はしていません。
A4セルの値とC4セルの値を足したものがE4セルの値に等しいか、ということなら
If Range("E4").Value = (Range("A4").Value + Range("C4").Value) Then
とします。
009291
2014/07/07(月) 01:21:12.01ID:tBZpjBzURange("E4").Value = Range("A4").Value + Range("C4").Value
となります。代入するときの = は ← と思えばいいです。
0093デフォルトの名無しさん
2014/07/07(月) 14:20:36.21ID:IFMXh2PZActiveXチェックボックス自体は正常に動作しているのですが、
チェックボックスに触るとそれ以前の操作をアンドゥ出来ません。どこかに設定があるのでしょうか?
また、代替出来る機能、方法などがあれば教えていただけないでしょうか。
クリック操作によりTrueかfalse、もしくは0か1かを返せるものが目的です。
0094デフォルトの名無しさん
2014/07/07(月) 15:04:38.55ID:AzugW9Umチェックボックスに限らず、VBAやコントロール操作が絡むと
アンドゥ利かなくなるのは仕様でどうしようもない
毎度の手間が増えても、アンドゥ使える利を取ってVBAやコントロール使わず手動操作するか
アンドゥの利を捨ててでも、毎度の手間を省けるVBAやコントロールを活用するか
アンドゥ可能で毎度の手間も省けるように、最初だけ莫大な手間掛けてでもアンドゥを自前で実装するか
の3択かな?
あとはどれ選ぶかはお好きなように
0095デフォルトの名無しさん
2014/07/07(月) 15:07:04.51ID:93FPLnbjマクロからシートへ干渉しつつUndoを保護出来るのはユーザー定義関数だね
0096デフォルトの名無しさん
2014/07/07(月) 16:08:21.48ID:IFMXh2PZありがとうございます、あきらめて01入力にします
0097デフォルトの名無しさん
2014/07/07(月) 20:01:25.58ID:hZfGBIQ8もーどれーなーいー♪
009888
2014/07/08(火) 00:13:12.93ID:Ik2S5C3q>>90
とりあえずはIfステートメント内で"="を使うと比較になるが、それ以外は代入になるという理解でよろしいのでしょうか?
>>91
If Range("A4").Value + Range("C4").Value = Range("E4").Value Then
は、比較演算子として"="を使用できたので、頂いたご回答の内容は間違えているような...
俺が間違えてたらすみません。
009991
2014/07/08(火) 00:26:14.65ID:jfQgGLMxIf Range("A4").Value + Range("C4").Value = Range("E4").Value Then の"="は
何と何の比較演算子として使用されているか、わかりますか?
010088
2014/07/08(火) 00:37:52.22ID:Ik2S5C3qよく読んでみたら、多分俺が間違えてますね。
すみません。
よくわからないのですが、例えば2+7=9だとしたら、7=9になるためには7は+2足りないので-2となり、
2+(-2)は0でこれは真になり、それ以外は偽ということでしょうか?
バカで初心者な俺は>>98で書いたような理解で割り切っておいた方がよさそうですが...
0101デフォルトの名無しさん
2014/07/08(火) 00:40:43.94ID:IVVVLtjNいいえ
変数やプロパティ = 〜〜〜
の場合が代入であり、それ以外はIfに限らず比較演算
例えば
変数1 = 変数2 = 変数3
だと、後者の=が比較演算で、変数2と変数3が同一値ならTrue、違えばFalseを変数1に代入する
あと>>91の回答については、彼は演算子の優先順位と結合規則を勘違いしている
算術演算子(+)は、比較演算子(=)より優先されるので
A4と、C4=E4の比較結果を加算し、それを論理値として評価するのではなく
A4+C4の結果と、E4を比較して分岐するというのが正しく
彼が「決して〜していません」と言ってるものが実際の動作だ
彼が最後に ( ) を付けたコードを書いてるが、元から算術演算子(+)が優先なので
+側は ( ) を付けなくても優先評価され、逆に彼が言うような動作にしたい場合に、=式に ( ) を付けるのが正しい
なんなら
Debug.Print Range("A4").Value + (Range("C4").Value = Range("E4").Value)
として、A4、C4、E4に、それぞれ10、20、30とでも入れて実行してみると良い
>>91の解釈では10と、20=30の結果の加算なので、20=30がFalseで0、10+0で10が返るが
実際には10+20で30、30と30を比較してTrueが返るから
010288
2014/07/08(火) 00:41:13.02ID:Ik2S5C3q汚い言葉を吐いてしまい、申し訳ありませんでした。
010388
2014/07/08(火) 01:46:50.13ID:Ik2S5C3q>>101
「変数やプロパティ = 〜〜〜
の場合が代入であり、それ以外はIfに限らず比較演算 」
なるほど、ありがとうございます。
Sub チェック()
Range("A4").Value + Range("C4").Value = Range("E4").Value
End Sub
で"+"が消えてしまうのは、Ifステートメント以外で変数やプロパティ等の直後に算術演算子は使えないということでしょうか?
他の算術演算子は消えてしまうのではなく、エラーでしたが。
Debug.printはまだ勉強してないのですが、実行してもなんの反応もありませんでした。
0104デフォルトの名無しさん
2014/07/08(火) 02:20:58.30ID:8MxDgJSCなんか見てて 算数なんかの
1 + 2 = 計算結果
をイメージしてるように感じるんだけど 違うかな?
プログラムだと
計算結果 = 1 + 2
と考えないとだめなんだよね
010588
2014/07/08(火) 03:23:55.36ID:Ik2S5C3q説明が下手で申し訳ないのですが、要は、Ifステートメント内だと算数のように記述できるのに、Ifステートメントがないと、どうして算術演算子をはじめにもってこれないのか、というのがわからないのです。
0106104
2014/07/08(火) 04:32:10.50ID:8MxDgJSC★ifの無いやつ(こういう表現きらいだけど)
入れ物 = 1 + 2 (1+2の 計算結果を 入れ物にいれる)
って考えた方がよいかな
★★★★右辺と左辺は逆にできない★★★★
★if ・・・は計算結果の入れ物は無くて
正しいかどうかを判定しているだけ
算数の
3a+3b=3(a+b)
の考え方ににてる これは正しいよね でも
3a+3b=3(a+b)+1
は間違いだよね
プログラムのif は
if 3a+3b = 3(a+b)+1
と書かれたとき
それが正しいか間違っているか のみを判定してるのよ
正しいか間違ってるか だけだから
if 3a+3b = 3(a+b)+1
if 3(a+b)+1 = 3a+3b
この両方は一緒の判定
★★★★右辺と左辺が逆になっても評価は変わらない★★★★
注意:上の if文は プログラム構文上間違いだけど 説明の為に あえて算数的表現にしてます)
0107デフォルトの名無しさん
2014/07/08(火) 09:47:49.84ID:GI47KTJ5Range("A4").Value + Range("C4").Value = Range("E4").Value
が、文法的に許されていないから
Range("A4").Value( Range("C4").Value = Range("E4").Value )
のようにValueメソッドの引数だと解釈されてるだけ
だから"+"が消える
0108デフォルトの名無しさん
2014/07/08(火) 10:12:36.38ID:2n5wMRlnRange("A4").Value + Range("C4").Value = Range("E4").Value
は文法的に間違ってる
Range("E4").Value = Range("A4").Value + Range("C4").Value
という書き方ならIf関係無しに書ける。(というかこれは当たり前の書き方)
これは端的に言って「そういうルール(文法)だから」としか言いようが無い。
「代入は常にイコールの右からイコールの左の方向で行う」という決まりだから、
イコールの左側には一個の変数(あるいはオブジェクト)しか置けない。
(そうじゃないと右辺の演算結果(あるいは評価結果)が代入出来ないでしょ。)
つまり、あなたの言う算数的な書き方(A+B=Cの書き方)はVBAのルール上認められていない。
0109デフォルトの名無しさん
2014/07/08(火) 10:14:06.13ID:rhZFZ210ところで正符号が消えずに残るようなケースってあるんだろうか?
a = +1
みたいに数値や変数の符号として使うと絶対に消えるよなあ
0110104
2014/07/08(火) 10:29:48.35ID:8MxDgJSCん? そういうつもりで書いてるけど
>1 + 2 = 計算結果
>をイメージしてるように感じるんだけど 違うかな?
は >>103を見ての感想なのだが
0112デフォルトの名無しさん
2014/07/08(火) 12:49:17.50ID:bwv+df8uExcelはいい加減VBAから脱却してくれ
0113デフォルトの名無しさん
2014/07/08(火) 13:06:47.36ID:IVVVLtjNそういう奴は、代入演算子と等価の比較演算子が別になったところで
どうせ違うところで混乱するので言語の問題じゃない
011488
2014/07/08(火) 14:32:04.31ID:Ik2S5C3q結局条件分岐以外で「=」を使うと代入になり、VBAではそういうルールになっていると。
引数はまだわからないですが、条件分岐以外ではじめに「+」を持ってくると消えてしまう理由は>>107と>>109の説明がわかりやすかったです。
>>101
「> とりあえずはIfステートメント内で"="を使うと比較になるが、それ以外は代入になるという理解でよろしいのでしょうか?
いいえ
変数やプロパティ = 〜〜〜
の場合が代入であり、それ以外はIfに限らず比較演算 」
ここの部分がわかりません。
If Range("E4").Value = Range("A4").Value + Range("C4").Value Then
の場合の"="も代入になると言ってる訳ですよね?
この"="は比較ではないのですか?
ちなみに今読んでいる入門書には「条件分岐の中で使われている「=」は比較演算子であり、
それ以外の場所で使われている「=」は代入演算子であると見分けるとよいでしょう」とありました。
とりあえず参考書の説明で理解していこうと思います。
学習を始めたばかりで人によって違う事を言われたり、まだ習っていない内容で答えてもらっても非効率だと思うので、そろそろこの質問も終わりにしたいと思います。
0115デフォルトの名無しさん
2014/07/08(火) 14:58:05.12ID:2n5wMRln>ここの部分がわかりません。
>
>If Range("E4").Value = Range("A4").Value + Range("C4").Value Then
>
>の場合の"="も代入になると言ってる訳ですよね?
違うよ>>101はそんな事言ってない
>>101は
>例えば
> 変数1 = 変数2 = 変数3
>だと、後者の=が比較演算で、変数2と変数3が同一値ならTrue、違えばFalseを変数1に代入する
という部分で言及してるけれど、
この二つのイコールが入った文は最初の(変数1 = の)イコールは代入だけど、
次のイコールは比較になってるの。
だから、Ifの中にも代入のイコールがあるということではなくて、
Ifが無い比較演算子のイコールも存在するといってるんだよ。
IfのなかでThenの前には比較演算子としてのイコールしかないと思うよ。
(Then以降には代入のイコールが入る)
というか君自身はあっさりスルーしてるけれど
一連の質問の中で一番間違ってた部分は
A + B = C という書き方自体なわけで
まずそこが間違ってることを理解することが一番肝心だと思うよ。
011688
2014/07/08(火) 15:37:35.95ID:Ik2S5C3qありがとうございます。
条件分岐なしの場合だと代入と比較を使えるが、条件分岐ありだと比較しか使えないということですね。
よくよく考えてみれば後者条件分岐なのだから比較なのは当たり前ですが。
C = A + Bという順番にしなければいけないのは、VBAは文法的に、Cについての説明はCの後に持ってこなければいけないということですよね?
このCについて説明するというのが代入で、左辺と右辺が同じかを判断するのが条件分岐の比較だと。
0117デフォルトの名無しさん
2014/07/08(火) 17:41:56.73ID:tPs811eF基本的に"="はどんな時でも比較演算子とみなされる
ただし、いきなり
a = 1
とか書いた時だけは代入演算子とみなされる
という考えの方が(とても雑だけど)いいよ
例えば
a = 1 = 1
という式の場合は、a = の=だけが代入演算子で、1 = 1は比較演算子になる
IF 1 = 1 = 1 then
の場合は全部比較演算子
引数っていうのは
Range("E4")
の "E4" のことだ
0118デフォルトの名無しさん
2014/07/08(火) 22:58:13.00ID:ptSAp+eFOS:XP
Excel:2003です
職場で、oracleからADOでレコードをとってきて更新するマクロを使っているのですが、
重複レコードがないのにoracleの一意性約違反が出てしまいます
拙いながら調査すると、256レコード目までは更新できるのですが、257行目でエラーとなっているようです
ちなみに、全く同じ更新内容を、同じツールを使い、別のマシンで実行すると正常に行きます
マシンのメモリの限界などがあるのでしょうか?
どうしたら今のマシンでも動くようになるでしょうか
漠然とした質問ですみません
よろしくお願いします
0119デフォルトの名無しさん
2014/07/08(火) 23:03:36.99ID:Nz16FxJyそれはoracleの致命的なバグなんだと思うよ
0120デフォルトの名無しさん
2014/07/08(火) 23:05:30.32ID:rhZFZ210正常に動く別のマシンもXPでExcel2003なの?
0121デフォルトの名無しさん
2014/07/08(火) 23:06:40.64ID:ptSAp+eFそうです
詳しくは見てませんが
マシンの購入時期によりスペックはまちまちです
0122デフォルトの名無しさん
2014/07/08(火) 23:08:28.34ID:rhZFZ210実績を考えたら、欠陥はOracleじゃなくて自作VBAの側にあると考えるのが自然
0123デフォルトの名無しさん
2014/07/08(火) 23:11:32.37ID:rhZFZ210まずはシステム構成やバージョンなどを詳しく見てきてください
ADOのバージョンも、それぞれのマシンで確認してください
それから、正常に動作したマシンからブックをコピーして試してください
012488
2014/07/08(火) 23:14:32.01ID:Ik2S5C3q>>107で説明してもらってますが、いきなりRange("A4").Value + Range("C4").Valueと書くと、
+ Range("C4").ValueがただのRange("C4").Valueと判定されて+が消えてしまうのですね。
Valueはメソッドとしても使えるのですね。
今勉強している本は『Excel VBAのツボとコツがゼッタイにわかる本』というものです。
この本はamazonで随分人気が高いようですが、初心者に「VBAとはこういうもの」とサラッとわからせるのが目的みたいで、
「初心者のみなさんは、このような理解でいいでしょう」という言葉が結構あります。
深く理解するのは他の本でやってくださいって感じですね。
>>113
知恵袋の話ですけど、パソコン教室でVBAを習う人の中で、なんとか使えるようになる人が1割で、バリバリ使えるようになるのはさらにその中の1割らしいです。
私もそうですが、世の中理解力の乏しい人間がほとんどなのだと思います。
頑張って「なんとかVBAを使える1割」に入りたいものです。
ちょっと自信を失いかけてますが...
正直まだ疑問に思う部分はあるのですが、お陰様でとりあえず最初の疑問は解決できました。
勉強を進めていって、それでも理解できなければまた質問させていただきます。
ありがとうございました。
0125デフォルトの名無しさん
2014/07/08(火) 23:14:58.74ID:ptSAp+eFありがとうございます
見てきます
ちなみにDB更新ツールはサーバ上に置いてあり
サーバ上で実行してるのですが私のマシンからではNGで
他のマシンからならOKなんです
0126デフォルトの名無しさん
2014/07/09(水) 00:22:55.85ID:fvKhY7zRRange(A1).Value & ".拡張子"
で参照したファイルを右クリック
・ショートカットメニューが出現
・「印刷(P)」を選択
こんなコードを書いて貰えないでしょうか
0127デフォルトの名無しさん
2014/07/09(水) 00:58:34.95ID:tDynlsgr突っ込もうとしているデータが本当に一意制約に違反してるのか調べるところからじゃないの?
0128デフォルトの名無しさん
2014/07/09(水) 01:18:18.59ID:YAhpnUVvそれは調査してみました
エラーの出るところまでで入ってるレコードの主キーを全部書き出し、エラーの出てるレコードの主キーを確認しましたが、全く重複はしていませんでした
257行目の挿入で何が起きているのかがさっぱり不明です…
0129デフォルトの名無しさん
2014/07/09(水) 01:22:42.42ID:rKYF3dJl> どんな拡張子でも
って、もちろん「Excelで開ける拡張子なら」って話で良いんだよね?
「Excelで開ける」って縛り無しだと、億単位の金が稼げるようなビックプロジェクトになっちゃうし
0130デフォルトの名無しさん
2014/07/09(水) 01:33:26.12ID:hwFRyxUkキー重複があれば一意制約違反が起こる。
重複がなければ一意制約違反は起こらない。
事実はそのいずれかに限られるんだ。
つまり、君の話す事は矛盾しているのだよ。
おかしいと思わないかい?
0131デフォルトの名無しさん
2014/07/09(水) 01:34:01.84ID:tDynlsgrいやいや、エラーになった時のデータベースの中身見ろよ...
0132デフォルトの名無しさん
2014/07/09(水) 08:09:19.69ID:cCCpjr/i面倒な書き方をしてしまいました。
エクセルファイルを右クリック
・ショートカットメニューが出現
・「印刷(P)」を選択
このコードの作り方を知りたいです
0133デフォルトの名無しさん
2014/07/09(水) 08:20:28.11ID:nZmCpVllWMIで出来たと思うが見つからなかったので第2案
拡張子を気にせず印刷する
http://vbaexcel.seesaa.net/s/article/148418450.html
0134デフォルトの名無しさん
2014/07/09(水) 12:50:02.75ID:fvKhY7zRさっぱり理解できませんが頑張ってみます
ありがとうございます
0135デフォルトの名無しさん
2014/07/10(木) 20:16:55.64ID:dz0pgHBRDim PrinterName As String
Dim filename As String
Dim myshell As Object
Sub Macro1()
PrinterName = Application.ActivePrinter
filename = ファイル名.pdf
Set myshell = CreateObject("WScript.Shell")
myshell.Run ("AcroRd32.exe /t " & filename)
End Sub
印刷部数を指定したいのですが、どこに何を追加したらいいですか?
0136桃白白 ◆9Jro6YFwm650
2014/07/10(木) 20:30:42.90ID:sacsCKyOAcroRd32.exeの起動引数で部数を指定することはできなさそっすね。
じゃあ、Runをループでぐーるぐる。
Dim NumberOfCopies As Integer
NumberOfCopies = 4
Dim i As Integer
For i = 1 To NumberOfCopies
myshell.Run "AcroRd32.exe /t " & filename
Next
0137デフォルトの名無しさん
2014/07/10(木) 20:35:00.30ID:dz0pgHBRお早い回答ありがとうございます!
0138デフォルトの名無しさん
2014/07/10(木) 21:12:25.60ID:sywxafAfマシンのスペックを見たところ、私のマシンはメモリ1G
正常に動作するマシンは516M
単純に物理的なメモリだけなら私のマシンのスペックのほうが上でした
ADOのバージョンは2.8
サーバで動作させてるので両方バージョンは同じです
こういった事象はあまり報告がないのでしょうか?
ちなみに、かのツールを使い他の更新データで更新をかけても、
同じように256レコード目までは動作し、257レコード目のrecordset.update
で一意制約違反で死にました。
更新データはStringのみのユーザー定義型配列に全件セットし、そこからレコードセットに渡して更新をかけています。
配列の中身は正常です
レコードセットにも値は渡っています
他に何が考えられるでしょうか??
職場はネットに繋がらず
環境をいじることは禁止されているので
ADOのバージョン等をあげることはできません
0139デフォルトの名無しさん
2014/07/10(木) 21:26:57.28ID:HM31btdY言われても…なんですが。
これ以上はDB板のoracleスレで聞いたら?
情報一切なしで質問しても同じこと言われるだろうけどさ
0140デフォルトの名無しさん
2014/07/10(木) 21:31:56.79ID:+ocYnFzfデータベースなんてろくに使ったことがない私には
何のことやらさっぱりなんですけど、
それにしたってExcelVBAの話なら
コードを晒すのが一番手っ取り早いと思うんですよ。
それは無理なんですか?
(クローズドなネットワーク上にあるなら無理なのかな?)
あるいは、NGなマシンとOKなマシンで
それぞれマクロをステップ実行して
NGのマシンでエラーが出るところの動作の違いを
比べてみるとかできませんか?
もちろん、最初からステップ実行するんじゃなくて、
ループの256周目にブレークポイントつけといて
そこからで良いと思いますが。
0141デフォルトの名無しさん
2014/07/10(木) 21:36:16.36ID:qlQWaxh+かのツールって?
0142デフォルトの名無しさん
2014/07/10(木) 23:28:04.08ID:WG8zYGhCPKは4つですべてVARCHAR、上述もしましたが全く同じテーブルに全く同じ更新をかけても私のマシンでだけ死ぬんですよね…
なので端末によってString配列の保持できる限界があって、257レコード目が実は値が持てていないか変な値になってしまっているとか
そういうことを疑ってみたのですが…
ソースを公開はもちろんできませんが
簡単に書くと
For i=1 to 配列数
recordset.Fields(カラム1)=string(0)
recordset.Fields(カラム2)=string(1)
recordset.Fields(カラム3)=string(2)
…
recordset.update
Next
というようなごく普通の更新なのですが
iはLongです
動きを比較するのはやってなかったので試してみますね
それでわからなければ諦めます…
0143デフォルトの名無しさん
2014/07/11(金) 03:00:02.99ID:7vFSIHSKこういうのがあるかどうかも知らないで言うけど、
トランザクションの限界が、256レコードとか?
0144デフォルトの名無しさん
2014/07/11(金) 03:07:24.40ID:REfi/XETあと、トリガとか張ってあったりしたらクライアントの問題ではないかもしれん
が、どう考えても>>138のコードがバグってる可能性が高いんだがw
エラー出たときに実際にインサートしようとした値と配列の中身調べろよ
本気で聞きたいならミニマムコード作ってあげろ
0145デフォルトの名無しさん
2014/07/11(金) 12:27:48.35ID:z7P6dWBI0146デフォルトの名無しさん
2014/07/11(金) 12:46:32.42ID:ngtQGasB一々賛同者を求めなくて良いよ。
君が放置したいならそうすれば良い。
誰もそれを咎める奴などいない。
でも答えたがる人達も居るんだから
そういう人達が回答するのを君が止める必要は無い。
そういうことを言ってるとしまいには隔離スレのようになる。
0147デフォルトの名無しさん
2014/07/11(金) 13:07:44.63ID:kQWSbLrzお前が>>145を放置しとけよ
0148デフォルトの名無しさん
2014/07/11(金) 13:55:04.29ID:GBtr3LPrお前も>>146を放置しとけよ
0149デフォルトの名無しさん
2014/07/11(金) 14:26:47.23ID:kQWSbLrz>>146みたいな馬鹿には言ってやらんとわからんからな
親切心だ
0150デフォルトの名無しさん
2014/07/11(金) 15:16:07.32ID:u5XcYD/qここはあと二回くらいはテンドンするべきところだったと思う。
非常に残念でならない。
0151デフォルトの名無しさん
2014/07/11(金) 15:41:49.56ID:AD+RWQfGV$SQL系から履歴確認してみたら?
文字が化けてたりするかもよ
0152デフォルトの名無しさん
2014/07/11(金) 16:32:55.01ID:dVpzO1KY0153デフォルトの名無しさん
2014/07/11(金) 17:23:48.62ID:XLLUm7RS> 一々賛同者を求めなくて良いよ。
あちゃー、文面通り受け取る素直な奴がまだいたんだな...
別に賛同なんて求めてなくて、「答えて欲しけりゃ人の話聞けよ、バーカ」っつーのを婉曲に言ってるだけ。
世の中にでたら、こういう嫌みな言い方する奴一杯いるから気を付けてね (w
0154デフォルトの名無しさん
2014/07/11(金) 17:59:23.92ID:7ammqW7i0155デフォルトの名無しさん
2014/07/11(金) 18:41:00.17ID:AD+RWQfG0156デフォルトの名無しさん
2014/07/11(金) 20:20:58.51ID:4w3m6myd0157デフォルトの名無しさん
2014/07/11(金) 20:59:19.50ID:1uaPwXNB0158デフォルトの名無しさん
2014/07/11(金) 22:57:19.14ID:Ed0PB8nf0159桃白白 ◆9Jro6YFwm650
2014/07/11(金) 23:13:38.38ID:GkKreVX4∩___∩
/ ノ \ ヽ
| ● ● |
彡 (_●_) ミ
/、 |∪| ,\
/.| ヽノ | ヽ
,,/-―ー-、, --、 .|_,|
r-、,'''";;:;;:;::;;;;:;;::;:;:;;::;:;`'- /_,l,,__ )
|,,ノ;;:;r'" ̄ ゙̄^"`Y'-、;;;::;:;::;:;:;:;::;:|
.ヽ,′ ; `"";;;;;⌒゙')
´`゙'''''''''''‐-‐'"`‐-‐'"゛ `゙´
0160デフォルトの名無しさん
2014/07/12(土) 00:26:50.10ID:RDT19VbG誤解させてごめんな (w
0161デフォルトの名無しさん
2014/07/13(日) 14:19:53.82ID:CV5kHNB8出来るなら教えて下さいm(__)m
フォームならプロパティで設定出来ますよね
0162デフォルトの名無しさん
2014/07/13(日) 14:44:58.98ID:QheVEL1dエクセルで出来るかは知らんけどな。
0163161
2014/07/13(日) 16:57:32.39ID:CV5kHNB8With Application
.Top = 50
.Left = 150
.Width = 1000
.Height = 650
End With
確かにウィンドウの方であってブックでは無い…のか。
言葉を間違えるとダメですね。
0164デフォルトの名無しさん
2014/07/15(火) 23:11:41.68ID:Pf38M2Fbブック1のA列の文字とブック2のA列の文字全てと比較し
もし同じ文字がブック2のA列に1個でもあった場合にブック1のB列のセルに「一致」という文字を入れるようにしたいのですがどのようにすればいいでしょうか?
例えばブック1の Cells("1,1") に「A100」とありブック2の Cells("5,1")が「A100」の場合一致となり
ブック1の Cells("1,2") に 「一致」 と入るようにし、なければなにも記入しない
同様にしてブック1の Cells("2,1")と一致するブック2の列を探しループさせたいのです。
よろしければアドバイスを下さい。
windows7
EXCEL2003 です。
0165デフォルトの名無しさん
2014/07/16(水) 00:11:56.86ID:S0iOCF8sFind
0166デフォルトの名無しさん
2014/07/16(水) 12:15:49.25ID:Q5qGFd/O0167デフォルトの名無しさん
2014/07/16(水) 14:29:58.32ID:uTSBoZhXとりあえずVisual Studioでいいんじゃね
どのエディションから出来るがしらんが
0168デフォルトの名無しさん
2014/07/16(水) 19:15:16.20ID:CWCGAhMrたとえば 2007以前の Office にリボンを付けたいのか
自作アプリに Excel風のリボンを付けたいのか
2007以降の Office のリボンの項目をカスタマイズしたいのか
それともまったく別の話なのか
0169デフォルトの名無しさん
2014/07/16(水) 19:44:30.07ID:Q5qGFd/Oコメントありがとうございます。
EXCELに自作のリボンを組み込んで、EXCELをVBAとそのリボンで操作
したいのですが。
0170デフォルトの名無しさん
2014/07/16(水) 20:39:39.91ID:tTSUc19b0171デフォルトの名無しさん
2014/07/17(木) 02:49:51.87ID:TFQGtdi0こちらのサイトに公開されてるアクセスのコードなんですが
Windowsの標準DLLを利用して、メールを受信、送信するプログラムを
実行したいのですが、うまく動かせません。
動かそうとしてるソフトのバージョンは、アクセス2010です。
作成されたとおもわれる環境は、アクセス97、2000のようですが。
やったこと
テーブルに、メールアドレス、パスワードなどの情報をいれて保存しました。
マクロを実行しようとすると、マクロ名がありません。→いまここ
初歩的なところとでとまってるんでしょうが、受信したメールがテーブルに入るのを確認できたら
それをVBAで編集して必要な情報をエクセル連携で情報をとりだして業務に活用したいと考えております。
よろしくお願いします。
0172デフォルトの名無しさん
2014/07/17(木) 05:34:57.77ID:loHvM2svここで聞いちゃダメって訳でもないのですが、
アクセスVBAには専用のスレがありますよ。
Access VBA 質問スレ Part1
http://peace.2ch.net/test/read.cgi/tech/1328536426/l50
一応、マルチポスト扱いにならないように
ここで誘導されてきた旨を明記した上で向こうで再質問してはいかがですか?
(多分向こうのスレで回答できるような人達はこっちも見てると思います。)
0173デフォルトの名無しさん
2014/07/17(木) 22:23:42.15ID:XaAH9ackEXCEL2007
を使用しております
IEobjectを使用し特定のラジオボタンにチェックをつけるという事をしたいと思っております
<INPUT value=1 CHECKED type=radio name=turkKknFlg>指定なし
<INPUT value=2 type=radio name=turkKknFlg>2日以内
<INPUT value=3 type=radio name=turkKknFlg>5日以内
<INPUT value=4 type=radio name=turkKknFlg>1週間以内
<INPUT value=5 type=radio name=turkKknFlg>日付を指定
ObjIE.Document.all.item("turkKknFlg").Value = 5
ObjIE.Document.all.item("turkKknFlg").checked
objIE.Document.getElementsByName("turkKknFlg")(5).Click
などをやってみたのですが 同じ名前が5個ある為か
オブジェクトはこのプロパティまたはメソッドをサポートしていませんと怒られてしまいます
ObjIE.Document.all.item(123).checked
の様に数字を指定せずに何かいい方法無い物でしょうか?
0174デフォルトの名無しさん
2014/07/18(金) 00:05:56.35ID:CjYs434Gそのエラーは名前の重複と関係ないと思われ
0175デフォルトの名無しさん
2014/07/18(金) 03:25:21.72ID:5y1KopaYインデックスは 0スタートです
下どれでも好きなのを
objIE.Document.all.Item("turkKknFlg")(4).Checked = True
objIE.Document.all.Item("turkKknFlg")(4).Click
objIE.Document.getElementsByName("turkKknFlg")(4).Click
>数字を指定せずに何かいい方法無い物でしょうか?
これが インデックスを指定せず なら
これとか(Value値 5 を探している)
Dim turkKknFlg
For Each turkKknFlg In objIE.Document.all.Item("turkKknFlg")
If turkKknFlg.Value = 5 Then
turkKknFlg.Checked = True
Exit For
End If
Next
0176デフォルトの名無しさん
2014/07/18(金) 06:52:11.81ID:H4/dInHHインデックス決め打ちしてるけど、順序ってHTMLに出現した順序になる保証はあるのか?
つか、VBA関係ない話だな
0177175
2014/07/18(金) 08:05:44.40ID:5y1KopaY>インデックス決め打ちしてるけど、順序ってHTMLに出現した順序になる保証はあるのか?
下記で HTMLに出現した順序になると解釈しているが違うのか?
とは言え VBA関係ない話なのは そうだから これでお終いにする。
http://msdn.microsoft.com/ja-jp/library/cc410318.aspx
構文 object.all([index])
>注意事項
>エレメントオブジェクトの順番はHTMLソースの順番となる。
>例
>次のJScript例は、ドキュメント内の全てのタグ名をその出現順に表示する。
http://msdn.microsoft.com/ja-jp/library/cc428088.aspx
element = object.item(index [, subindex])
>例
>エレメントをドキュメントの中で出現する順番で読み出すことになる。
0178デフォルトの名無しさん
2014/07/18(金) 14:13:32.67ID:pod0w9Wn皆さんありがとうございます
無い物を指定していたのでエラーになっていたのですね
0179デフォルトの名無しさん
2014/07/18(金) 20:06:18.93ID:V7toNe43Debug.Printだとデバッグ中しか使えないので。
0180デフォルトの名無しさん
2014/07/18(金) 20:16:35.55ID:LLU7aR/j0181デフォルトの名無しさん
2014/07/18(金) 20:31:15.80ID:j3nSRPn10182デフォルトの名無しさん
2014/07/18(金) 22:51:27.19ID:CjYs434GいまだにDOS窓と言うジジイが多くて困るわ
コマンドプロンプトにメッセージ表示は可能だけど、理由がわからん
メッセージ出力という目的で見れば、イミディエイトウィンドウと同じぐらい不便だと思うのだが
なんならダイアログボックスでいいじゃん
0183デフォルトの名無しさん
2014/07/18(金) 23:20:40.54ID:dRZmRHWxきしょい
0184デフォルトの名無しさん
2014/07/18(金) 23:26:54.89ID:H4/dInHHmsg = "テストメッセージ"
Call shell("cmd.exe /K echo " & msg)
これに意味があるかどうかはしらん
ホントは標準出力なり標準エラー出力なりに出力したいんだろうけど
VBAに標準入出力の機能はないんだよ
0185デフォルトの名無しさん
2014/07/18(金) 23:48:45.96ID:V7toNe43サンプルプログラムありがとうございます。
でもそれだと、実行するたびにDOS窓が開くので困ります。
一つだけ開いて、そこに文字を書きたいのです。
要するに、VB.NETでConsoleアプリ実行するような感じにしたいのです。
0186デフォルトの名無しさん
2014/07/19(土) 00:49:18.44ID:5mmZ/Q+l0187デフォルトの名無しさん
2014/07/19(土) 07:34:15.28ID:nqTdhk25これを1=A、2=Bと数値からアルファベットを取得する方法ないですか?
0188デフォルトの名無しさん
2014/07/19(土) 07:54:05.53ID:KUKSKIve5.17 列番号から列名を求める
0189デフォルトの名無しさん
2014/07/19(土) 09:34:41.86ID:5mmZ/Q+l一発で求める方法はないので、ちょっとした数式を工夫する必要がある
変数cに列番号が入っているとして
Replace(Cells(, c).Address(, False), "$1", "")
とか
Right(Columns(c).Address, 1 - (c > 26) - (c > 676))
とか
後者はExcelのバージョンアップで使えなくなる可能性があるけど
0190デフォルトの名無しさん
2014/07/19(土) 13:50:32.79ID:nqTdhk25sAddress = Split(oTarget.Address(False, False, xlA1),":")(0)
で行きたいと思います。ありがとうござました。
さて、
セルにハードコーディングされまくった大量の関数
と
ループや演算で位置を求めず、これまたハードコーディングしまくった大量のサブルーチンしかないVBA
でつくられた、エクセル方眼紙レポートを修正するか、2年で異動だからそれまで触らずに待つか考えよっと・・・(ToT)
0191デフォルトの名無しさん
2014/07/19(土) 19:39:28.69ID:xzoFoPNvそれ完全に、手を入れる度にカオス化していくパターン。
後の担当者の為にも余計な事しない方がいいよ。
0192デフォルトの名無しさん
2014/07/19(土) 21:50:48.13ID:xiMigv99いや、直すなら完全にVBAオンリーにしてしまおうと思っています。
ただ問題は、
素人は、サブルーチンは理解できるが、関数が理解できていない素人パソコン大先生が担当になるケースが多い
ということなんです。
うちの会社は、エロゲオンリーのパソコン大先生とソフトウェア開発オタクの差が人事的にないので・・・・。
下手にプログラマ的な組み方でやると、次に引き継ぐ人が読めなくて死ぬかな・・・と。
0193デフォルトの名無しさん
2014/07/19(土) 22:34:36.30ID:LMuGU7qL> 下手にプログラマ的な組み方でやると
列番号から列名への変換もできなかった奴が言うことじゃないわな (w
0194デフォルトの名無しさん
2014/07/20(日) 00:16:58.19ID:Ir+so4JeOSは7でoffice2007です。
Activesheetに以下の順不同で規則性がない変換表(A1:B5)があります。
A,B
a,あ
aaa,い
ab,う
aa,え
aん,わ
変換表を用いて文字列を、変換表A列の値があれば以下のケースのようにB列の値へ置き換えるという関数を作成したいです。
ケースは以下の通りです。(文字列→変換後文字列)
ああa→あああ
aいういa→あいういあ
aaaああ→いああ
aaええ→えええ
abaa→うえ
bbbb→bbbb
aんん→わん
本来ならaという文字でほとんどの条件に当てはまり変換されてしまうのを、より当てはまる条件があればそれに変換できるようにしたいです。
何かアイデアだけでもご教授していただければ幸いです。
0195デフォルトの名無しさん
2014/07/20(日) 00:49:01.93ID:mk57Kf21変換表を降順ソートして上から適用
0196デフォルトの名無しさん
2014/07/20(日) 00:50:00.95ID:mltsIski「より当てはまる」というのが「合致する文字数が多い」だと考えるなら、
変換表を文字数の多い順に並べて、上から順に当て嵌めていけば良いんじゃないか?
ただし、例えば
「aaab」は「いb」もしくは「えう」のどちらにも変換可能なので、
「どちらがより当て嵌まっているのか」の評価方法が分からなければ
一意の結果を求められない。
つまりこの質問は不十分な条件しか提示していないといえる。
0197デフォルトの名無しさん
2014/07/20(日) 01:17:00.67ID:mk57Kf210198デフォルトの名無しさん
2014/07/20(日) 01:45:27.82ID:Ir+so4Jeありがとうございます。
なるほど…文字数の多い順に並び変える、または優先度を設定すれば済む問題でしたね。
セル上では順不同で規則性がない変換表…という思い込みがありました。内部で並び替えを行った配列等に変換すれば問題ないですね。
ケースはある程度考えてから書いてはみたもののやはり抜けがありましたね…>>196さんごめんなさい
あと「より当てはまる条件」は不十分な日本語の説明でしたね、「合致する文字数が多い」が正しい表現です。
助かりました、後は考えてみます。
0199デフォルトの名無しさん
2014/07/20(日) 03:03:53.52ID:BmGivsLr「Sheet1」でエンターキーを押すたびにB1→D1→B2→D2→B3…と
セルを移動したいので、標準モジュールに
Sub Auto_Open()
Application.OnKey "~", "OnEnter"
End Sub
Sub Auto_Close()
Application.OnKey "~", "OnEnter"
End Sub
Private Sub OnEnter()
If (2 = ActiveCell.Column) Then
ActiveCell.Offset(0, 2).Select
ElseIf (ActiveCell.Column = 4) Then
ActiveCell.Offset(1, -2).Select
Else
ActiveCell.Offset(0, 0).Select
End If
End Sub
と打ち込んだのですが、「Sheet1」のシートだけにこのマクロを実行させたい
(他のSheet2やSheet3はエンターを押しても下に移動してほしい)
のですが、何か、方法はありますか?ちなみにExcel2003です。
0200デフォルトの名無しさん
2014/07/20(日) 03:25:33.69ID:mk57Kf21If ActiveSheet.Name = "Sheet1" Then
0201デフォルトの名無しさん
2014/07/20(日) 03:28:24.54ID:+YOkQ4ve0202デフォルトの名無しさん
2014/07/20(日) 04:18:30.13ID:BmGivsLrしかし、どうやっても変わらず、Sheet1〜Sheet3までマクロが実行されます。
「 If ActiveSheet.Name = "Sheet1" Then 」は、
どこに記述したらよいのでしょうか?
0203デフォルトの名無しさん
2014/07/20(日) 14:09:27.23ID:h/Hq+1toWEBのテキストを文字列変数に格納し、正規表現にマッチする情報のみワークシートに取り込むエクセルファイルがあります。
このファイルの調子が最近良くないのです。ファイルを開いて数分すると何かの処理が始まりキー操作など一切受け付けなくなります。
こうなるとエクセルを強制終了するしかなく大変困っています。
ググっていろいろ試してみました。すると、以下のコードを実行したところ、コネクションの数が約600ありました。
With ActiveWorkbook
For i = 1 To .Connections.Count
.Connections(i).Delete
Next i
End With
全てのコネクションを削除しましたが、症状は改善されません。
質問は以下の2つです。
1. コネクションが大量にあった理由と今後コネクション増加を防ぐ方法
(ネットで拾ったと思われる以下のコードでWEB情報を入手しています)
Private Function getHTMLbyURL(TargetURL As String) As String
Dim http As MSXML2.XMLHTTP
Set http = CreateObject("MSXML2.XMLHTTP")
http.Open "GET", TargetURL, False
http.send (Null)
Do While http.readyState <> 4
Loop
getHTMLbyURL = http.responseText
End Function
2. コネクションを削除しても症状が改善しない理由
(コネクションのように、webから情報を取り込む際に増加してしまうものはありますか?)
0204203
2014/07/20(日) 14:30:38.64ID:h/Hq+1toWEBのテキスト情報以外にも楽天RSSを用いてリアルタイム株価情報を取得しているコードがあることを思い出しました。
0205デフォルトの名無しさん
2014/07/20(日) 15:04:41.02ID:malHYamd作ってみたよ まず
Sub Auto_Open() ・・・削除
Sub Auto_Close() ・・・削除
Sub OnEnter() ・・・このまま使用
それで以下を追加
★標準モジュールに
Sub OnKey_Set(sh As Worksheet)
If sh.Name = "Sheet1" Then
Application.OnKey "~", "OnEnter"
End If
End Sub
Sub OnKey_ReSet(sh As Worksheet)
If sh.Name = "Sheet1" Then
Application.OnKey "~"
End If
End Sub
★ThisWorkbookモジュールに
Private Sub Workbook_Activate()
OnKey_Set ActiveSheet
End Sub
Private Sub Workbook_SheetActivate(ByVal sh As Object)
OnKey_Set sh
End Sub
Private Sub Workbook_Deactivate()
OnKey_ReSet ActiveSheet
End Sub
Private Sub Workbook_SheetDeactivate(ByVal sh As Object)
OnKey_ReSet sh
End Sub
0206203
2014/07/20(日) 17:57:10.85ID:h/Hq+1to原因はわかりませんが、Thisworkbook.Names.Countが2000以上ありました。
不要なNameをDeleteするプロシージャで応急処置は完了しました。
失礼します。
0207203
2014/07/20(日) 18:30:30.53ID:h/Hq+1toNames.countが増えた原因は自力でもなんとかなりそうなのですが、
Connections.countについては皆様の助言を頂きたいのです。
どうかお願いします。
0208デフォルトの名無しさん
2014/07/21(月) 17:28:38.92ID:ufWzAtLi返答遅れましたが、該当のスレッドで再度、質問させていただきます。
ありがとうございます。
0209デフォルトの名無しさん
2014/07/22(火) 01:01:06.71ID:91SFEMDE0210デフォルトの名無しさん
2014/07/22(火) 20:56:42.75ID:B7CkAUjZB列にはa〜eのいずれかの文字が複数書いてあります
イメージとしては
100 a
250 b,c,d
-70 a,e
120 b
-10 a,b,d,e
このようになっているとき、例えばcが含まれている数字のみを抽出し、その和を求めたいのですが
抽出にはどんな関数を用いればよいのでしょうか?
0211デフォルトの名無しさん
2014/07/22(火) 21:17:19.98ID:sFUEgbf6A列が数字ならA列の内容読みだすだけだろ
0212デフォルトの名無しさん
2014/07/22(火) 22:41:28.15ID:JAupmXZXsum = 0
do
i =i +1
if instr(cells(i,2),"c") <> 0 then
sum = sum + cells(i,1)
end if
loop untill cells(i,1)=""
0213デフォルトの名無しさん
2014/07/22(火) 22:54:08.59ID:PXxjV5qqWith Selection
.MergeCells = True
End With
Range("B2:B3").Select
With Selection
.MergeCells = True
End With
Range("C2:C3").Select
With Selection
.MergeCells = True
End With
Range("D2:D3").Select
With Selection
.MergeCells = True
End With
Range("E2:E3").Select
With Selection
.MergeCells = True
初心者です。
次はA4:E5までって感じでA60:E61までループさせたいです。どうやればいいのでしょうか
あと「選択範囲は複数のデータがあります〜」っていう警告が出ないようにしたいです
よろしくおねがいします
行の縦結合の繰り返しです
0214デフォルトの名無しさん
2014/07/22(火) 22:57:46.44ID:JAupmXZXApplication.DisplayAlerts=False
0215デフォルトの名無しさん
2014/07/22(火) 23:15:36.17ID:PXxjV5qq警告出ないように出来ました! ありがとうございます
表のサンプルですが、こんな感じです
http://www.dotup.org/uploda/www.dotup.org5206553.jpg
A列〜E列までを行A2〜E61まで結合していきたいです
0216デフォルトの名無しさん
2014/07/22(火) 23:25:34.37ID:sFUEgbf6Dim i As Integer, j As Integer
With ActiveSheet
For i = 1 To 5
For j = 2 To 60 Step 2
.Cells(j, i).Resize(2).MergeCells = True
Next
Next
End With
0217デフォルトの名無しさん
2014/07/22(火) 23:28:11.73ID:JAupmXZXDim i As Integer
Dim j As Integer
For i = 2 To 61 Step 2
For j = 1 To 5
Range(Cells(i, j), Cells(i + 1, j)).MergeCells = True
Next
Next
End Sub
これでOK?
0218デフォルトの名無しさん
2014/07/22(火) 23:31:58.74ID:JAupmXZX0219デフォルトの名無しさん
2014/07/22(火) 23:35:25.96ID:PXxjV5qqできました!!
本当にありがとうございました
こんな数行のプログラムでできるなんて、みなさんの頭の中どうなってるのか知りたいです
本当にありがとうございました
0220デフォルトの名無しさん
2014/07/23(水) 12:11:15.36ID:QYhPa3qH0221デフォルトの名無しさん
2014/07/23(水) 18:48:03.32ID:RzG+h6fN0222デフォルトの名無しさん
2014/07/24(木) 00:13:41.86ID:eSDzc6pS流れ的に次はピュッが来ると思ったわ
0223デフォルトの名無しさん
2014/07/24(木) 09:14:55.28ID:QG99+4AQ抱いてっ
0224デフォルトの名無しさん
2014/07/24(木) 11:09:17.24ID:y7iurEGEこんな感じの表なんですが
MsgBoxに箱数を入力したら、その箱数が入ってる行がDELETEされるようにしたいです
たとえば、MsgBoxに40と入力したらD列を参照して6と7行目の文字と色、数字が消えるようにVBAで可能ですか?(数式は残したい)
0225デフォルトの名無しさん
2014/07/24(木) 11:09:45.09ID:y7iurEGEこっちのリンクの方がいいですね
よろしくおねがいします
0226デフォルトの名無しさん
2014/07/24(木) 11:40:49.13ID:+XWbwIKpClearやClearContentsでも数式も消えちゃうし。
数式だけ残すとなると、
まず処理する領域(結合セルを含むので単純に求められない)を
確定し、その中の一セルずつの内容を判定して
数式以外の要素だけを消す、というコードを書く必要がありそうだ。
0227デフォルトの名無しさん
2014/07/24(木) 11:49:53.52ID:y7iurEGEすみません ClearかClearContentsでOKでした
数式じゃなくてリストボックスでした Clearで消えないのでOKですね
0228デフォルトの名無しさん
2014/07/24(木) 21:52:09.93ID:y7iurEGE0229デフォルトの名無しさん
2014/07/24(木) 21:56:49.32ID:ANLv8C9o0230デフォルトの名無しさん
2014/07/24(木) 22:15:18.74ID:y7iurEGE0231デフォルトの名無しさん
2014/07/24(木) 23:05:21.51ID:OebyoGSI>>224の説明と >>225のセル結合パタ−ンを元にコーディングしてますです
・6と7行目のどこかのセルが それ以外の行のセルと結合していない事が前提です
(D列の結合パタ−ンを元にしてる為、たとえぱ F7:F8が結合してるとかは 支障でるかもです)
Sub TEST()
Dim FindCell As Range
Dim HitCell As Range
Dim WS As Worksheet
Dim HAKOSU As Variant
Set WS = Worksheets("Sheet1") '対象シート
Set FindCell = WS.Range("D:D") '検索対象列
Do
HAKOSU = InputBox("箱数を入れてください")
If HAKOSU = "" Then Exit Sub
Loop Until IsNumeric(HAKOSU)
'箱数の検索
Set HitCell = FindCell.Find(What:=HAKOSU, LookIn:=xlValues , LookAt:=xlWhole , SearchOrder:=xlByRows)
If HitCell Is Nothing Then
MsgBox "入力した箱数 " & HAKOSU & " のデータはありません"
Exit Sub
End If
'検索したセルの結合を基準に 消去範囲の行を決定
With WS.Rows(HitCell.MergeArea.Row).Resize(HitCell.MergeArea.Rows.Count)
'背景色・文字色の消去
.Interior.ColorIndex = xlNone
.Font.ColorIndex = 0
'数式以外の消去
.SpecialCells(xlCellTypeConstants).ClearContents
End With
End Sub
0232199
2014/07/26(土) 23:34:23.09ID:FjiCrpchおかげで思ったとおりに動いたのですが
ネットワークでつなげたデスクトップのパソコンで開いて動かすと、
BSキーの下のエンターキーでは思ったとおりに動きますがテンキー側のエンターキーでは
B1→D1→B2→D2→B3…と動かず、B1→B2→B3…と動きます。
2つのエンターキーともB1→D1→B2→D2→B3…と動かすことはできますか?
0233デフォルトの名無しさん
2014/07/26(土) 23:56:46.66ID:jypj8fbMテンキー側のエンターキーは
Application.OnKey の
Key値が違う
ヘルプに書いてあるとおもうよ
(もしくはぐぐって下さい)
0234デフォルトの名無しさん
2014/07/27(日) 01:34:26.91ID:oU83TrYGhttp://msdn.microsoft.com/ja-jp/library/office/ff197461.aspx
テンキー側のエンターキーは "{ENTER}" って書けば良いのか
0235デフォルトの名無しさん
2014/07/29(火) 19:32:22.37ID:Q4BDSM86それがExcelのシートs(複数形のs)に存在するかどうかを調べるには
どういうコードを書きますか?
0236デフォルトの名無しさん
2014/07/29(火) 19:36:25.47ID:mnxPVg+2検索対象をブックにしてFindして回す
終わり
0237デフォルトの名無しさん
2014/07/30(水) 13:46:45.96ID:Z0Vu5FUeそのあと重複している値は1つだけ残してあとは削除し要素数もそれと連動して減らし
さらに配列の値を昇順でソートして並べるにはどういうコードを書きますか?
0238デフォルトの名無しさん
2014/07/30(水) 15:09:03.64ID:aI8uJF/z0239デフォルトの名無しさん
2014/07/30(水) 16:38:16.28ID:Z0Vu5FUe0240デフォルトの名無しさん
2014/07/30(水) 19:05:16.64ID:W5ylXrvA0241デフォルトの名無しさん
2014/07/30(水) 19:19:26.56ID:8DFz/FdQ重複削除 と そーと は Excelでやってから配列に入れる
0242デフォルトの名無しさん
2014/07/30(水) 19:20:44.05ID:DLJkd0ahVBAもそういうのあるのかな?
0243デフォルトの名無しさん
2014/07/30(水) 19:22:17.25ID:DLJkd0ahtreessetに入れるだけで終了
0244デフォルトの名無しさん
2014/07/30(水) 19:30:30.69ID:8DFz/FdQVBAの標準ではソートはないんだよね
Excelのシートでソートしろって事なんだろうけど
で配列でソートしようとするとソート組まないといけない
そんな事出来るオブジェクトだれか知らない?
0245デフォルトの名無しさん
2014/07/30(水) 19:32:53.44ID:DLJkd0ahcollectionてのがあるらしいぞ
これで一番目は解決だな
http://www.moug.net/tech/exvba/0030003.html
ソートはVBAにはメソッドないらしいな
作るの超めんどくせえから上の言うようにセルに書き出してソートした方が早そうだぞ
0246デフォルトの名無しさん
2014/07/30(水) 19:33:43.49ID:aI8uJF/z>そのあと重複している値は1つだけ残してあとは削除し
別に配列に入れる必要なんかないだろ、これ。
シートに1列に並べてソート、重複の削除をすれば良いだけだろ?
0247デフォルトの名無しさん
2014/07/30(水) 19:42:11.14ID:8DFz/FdQ配列の構成にもよるけど
データ量が数百件程度ならバブルソート(?)組めば
なんとか使えるけどもね(数行で作れる)
0248デフォルトの名無しさん
2014/07/30(水) 19:52:45.47ID:DLJkd0ahならセルでソートして上のコレクションにぶちこめば終わりじゃねーか
0249デフォルトの名無しさん
2014/07/30(水) 20:31:41.07ID:ROGffPQsJavaなんて最近になってラムダ式付いたくせに偉そうに
0250デフォルトの名無しさん
2014/07/30(水) 22:19:03.95ID:Z0Vu5FUeここは誰か一人がコードを書いてくれたら
他のみんながそれを使いまわせばみんながハッピーになれるんじゃないか?
0251デフォルトの名無しさん
2014/07/30(水) 22:31:29.89ID:Eswcz3fC0252デフォルトの名無しさん
2014/07/30(水) 22:34:50.45ID:Z0Vu5FUeそれはなに?
Accessかなにかのデータベース使うの?
0253デフォルトの名無しさん
2014/07/30(水) 23:09:24.47ID:aI8uJF/zFor j = .CurrentRegion.Rows.Count To 1 Step -1
If .Offset(j, 1) = .Offset(j - 1, 1) Then
.Offset(j, 1).EntireRow.Delete
End If
Next j
※事前に並べ替えられていること
0254デフォルトの名無しさん
2014/07/30(水) 23:13:12.97ID:WA0kT7am上にサンプルのせたのに
Dim MyData As New Collection
Dim i As Long
On Error Resume Next 'データを登録する間、エラーを無視する
For i = 1 To 10
MyData.Add Cells(i, 1).Value, Cells(i, 1).Value
Next i
On Error GoTo 0
で終わり
0255デフォルトの名無しさん
2014/07/30(水) 23:32:36.49ID:8DFz/FdQ作業列とか作業用シートが使えるなら
Range("A1:A100").AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Range("B1"), Unique:=True
但しA1 はデータでは無く列名(適当に "ああああ"とかでいいと思う)を入れる事
(じゃないとエラーになる)
0256デフォルトの名無しさん
2014/07/31(木) 00:38:48.83ID:zBkjzOCI0257デフォルトの名無しさん
2014/07/31(木) 01:09:02.16ID:kpP8LBS0時間かかる事を気にするなら
一回一回 セル アクセス するより
一度で配列に入れてからの Collection追加の方が早いとおもうぜ
0258デフォルトの名無しさん
2014/08/02(土) 16:08:36.44ID:fbt+8TPU0259デフォルトの名無しさん
2014/08/02(土) 16:29:24.99ID:/6ki1F6Zそのデータを()ごと削除する方法があったらを教えてください
0260デフォルトの名無しさん
2014/08/02(土) 16:48:17.89ID:fbt+8TPUSub test()
Dim a As Range
For Each a In ActiveSheet.UsedRange
If InStr(a, "(〜)") > 0 Then
a = Left(a, InStr(a, "(〜)") - 1) & Right(a, Len(a) - InStr(a, "(〜)") - Len("(〜)") + 1)
End If
Next a
End Sub
0261デフォルトの名無しさん
2014/08/02(土) 16:50:14.14ID:/6ki1F6Z「」内と「」が削除されるので
いいいいいいいい、となるようにしたいのです
0262デフォルトの名無しさん
2014/08/02(土) 17:07:00.56ID:Ef/k9dKo0263デフォルトの名無しさん
2014/08/02(土) 17:50:48.49ID:/6ki1F6Zですが私の力不足のためかうまく動いてくれませんでした。
【@@】や【0123】←と同じ様になっている箇所を削除するソースコードをお願いできたらと思います。
やり方としてはIfを使い 【 という文字が来たらその後 】 が現れるまで文字を確認しながら削除し続けるというものになると考えますが、
VBAを初めて日が私には記述方法がまだよくわかりません。
もしお時間がりましたらどうぞよろしくお願いします。
0264デフォルトの名無しさん
2014/08/02(土) 17:55:39.79ID:/6ki1F6Z少し書きなおして調整したらうまくいきました。
>>262様ありがとうございました。
0265デフォルトの名無しさん
2014/08/02(土) 19:45:35.90ID:UP+XFeb4.Netであれば属性クラスを利用する手段があるけど、
残念ながらVBAにはそんな機能はない。
なので、クラスを列挙体に見立てて各アイテムに当るものをString型の定数として定義する。
ただ、VBAは一つのファイルに複数のクラスを定義することは出来ないので、
その都度クラスを作らなければならないのが難点。
0266デフォルトの名無しさん
2014/08/02(土) 23:01:19.37ID:q/4scjvi列挙体のどの機能が必要?
単純には
Const Apple As String = "Apple"
Const Orange As String = "Orange"
...
Dim X As String
X = Apple
Select Case X
Case Apple
...
Case Orange
...
で、いいと思うが。
0267デフォルトの名無しさん
2014/08/02(土) 23:30:15.95ID:UP+XFeb4多分だけど、効率化とコーディングミスを減らせるように
インテリセンスが効くようにしたいんだと思う。
Enum使う醍醐味って言ったらまずそこだろうから。
0268デフォルトの名無しさん
2014/08/02(土) 23:38:10.39ID:UP+XFeb4文字列が取れるものと言うことね。
いくらインテリセンスが効いてもそれを指定して数値がとれて、
それに対応した文字列プログラムであとで設定するのであれば
Constで定義するのとあまり変わらないだろうし、その分プログラムミスする可能性が増えるだろうから。
0269デフォルトの名無しさん
2014/08/03(日) 01:36:50.37ID:wPxoYZY80270デフォルトの名無しさん
2014/08/03(日) 17:42:20.75ID:6cN1FsJPSheets("DATA1")とか、Sheets("Sheet" & i)みたいにやっていますよね?
これはまるでSheetsが配列変数名で、要素数が文字列、のようになっています。
このように配列変数のカッコ( )の中が整数じゃなくて文字列にしたいときはどうやって実現させますか?
0271デフォルトの名無しさん
2014/08/03(日) 17:59:12.22ID:4XbJJHdTCollectionかScripting.Dictionary
0272デフォルトの名無しさん
2014/08/03(日) 18:00:11.98ID:wVcpRmRy0273デフォルトの名無しさん
2014/08/03(日) 18:18:34.55ID:wPxoYZY8連想配列というのがちゃんとある
0274デフォルトの名無しさん
2014/08/03(日) 19:12:57.74ID:RYNd/+Rvそれ用のエンティティクラスを作成する。
0275デフォルトの名無しさん
2014/08/04(月) 14:57:23.18ID:NziPb5SI使用OSはWindows7でExcelは2010を使用しています。
wwww ああああああ
wwww いい
yyyy ううううう
yyyy えええ
yyyy おおおおお
を
wwww ああああああ いい
yyyy ううううう えええ おおおおお
というようにしたいのですが、なにかよい方法はないでしょうか?
VBAでなく正攻法の様な方法もあればお教え下さい。
0276デフォルトの名無しさん
2014/08/04(月) 15:22:23.11ID:nTN+njNAここ、VBA質問スレなんだけど。
0277デフォルトの名無しさん
2014/08/04(月) 15:26:11.92ID:nxovB/WP0278デフォルトの名無しさん
2014/08/04(月) 16:04:37.51ID:skJd4XQHVBAなら素直にコーディングしていくのが良いかねぇ
元データ変形させて良いのかとか、1列目でソートされてるのかとか
仕様に不明な点はあるけど
0279デフォルトの名無しさん
2014/08/04(月) 16:11:27.81ID:NziPb5SIはい、その通りです。
0280デフォルトの名無しさん
2014/08/04(月) 16:52:16.67ID:NziPb5SI0281デフォルトの名無しさん
2014/08/04(月) 17:43:10.08ID:Niv8kaxM同じキーなら文字列を繋げたいってことか?
ならコレクションに入れつつ
キーが被ったら(エラーになったら)そのキーの文字列につないで
また入れればいいんでね?
0282デフォルトの名無しさん
2014/08/04(月) 18:05:23.49ID:skJd4XQH0283デフォルトの名無しさん
2014/08/07(木) 23:37:49.69ID:TSahGoL1Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Target.Address = "$A$1" Then
UserForm1.Show vbModeless
End If
Cancel = True
End Sub
で指定セルからユーザーフォームを呼び出し、テキストボックスの値を、後ろから順に入力したい場合どのようにすれば良いのでしょうか?
例えば、↓のうちE1を指定セルとして「1234」を入力した場合、E1=4、D1=3、C1=2、B1=1としたいのです
A B C D E
1
2
0284デフォルトの名無しさん
2014/08/08(金) 00:48:04.01ID:SLBInlPK指定セルってなんぞや?
Targetのことならコード中では$A$1になってるし、
説明文中ではE1だし、この質問からでは理解できん。
仮に指定セル=E1がターゲットのことだとして、
ユーザーフォームからテキストボックスに入力した文字数が
もしも6文字以上だった場合どうするのか
(どういう挙動をさせたらいいのか)もわからん。
もう一度質問内容を整理して書き直したほうが良いと思うよ
0285デフォルトの名無しさん
2014/08/08(金) 01:08:03.18ID:ZZsJf1aLDim i As Long
Dim targetCol As Long
targetCol = Sheet1.Range("E1").Column
For i = Len(TextBox1.Text) To 1 Step -1
Sheet1.Cells(1, targetCol).Value = Mid(TextBox1.Text, i, 1)
targetCol = targetCol - 1
If targetCol <= 0 Then Exit For
Next
随所に手抜きがあるが
0286デフォルトの名無しさん
2014/08/09(土) 21:32:54.88ID:ZP+8lncrすまん、説明が下手だった
やりたいこととしては、
1 セルをダブルクリックで選択(セルは複数指定できるようにしたい)
2 ユーザーフォーム表示
3 ユーザーフォームのテキストボックスに数値を入力
4 OKボタンを押す
5 OKボタンを押すと、テキストボックス値をダブルクリックしたセルから左のセルへ順に入力(1234なら、4から順に左のセルへ)
0287デフォルトの名無しさん
2014/08/09(土) 21:41:06.52ID:eBEiJfpc0288デフォルトの名無しさん
2014/08/09(土) 22:42:56.97ID:5kOrjYhv「UI」と「処理」を分けて説明しる
UI:
「指定セル」をダブルクリック?で選択(複数可?)
「値」をユーザーフォームで入力
処理例1(E1に「1234」)
E1 = 4
D1 = 3
C1 = 2
B1 = 1
処理例2(C3に「3.14」)
C3 = "4"
B3 = "1"
A3 = "."
〓3 = "3" 'エラー
ということでOK?
0289デフォルトの名無しさん
2014/08/09(土) 22:53:03.45ID:r75duSxHやりたい事はこうゆう事?
>5 OKボタンを押すと、テキストボックス値をダブルクリックしたセルから左のセルへ順に入力
下は ユーザフォームに書く
Private Sub CommandButton1_Click()
Dim Target As Range
Dim Cel As Range
Dim Text As String
Dim OffsetNum As Long
Dim TextPtr As Long
Text = Me.TextBox1.Value
Set Target = ActiveCell
If Text = "" Then
Unload Me
Exit Sub
End If
If Target.Column < Len(Text) Then
OffsetNum = Target.Column - 1
Else
OffsetNum = Len(Text) - 1
End If
TextPtr = Len(Text) - OffsetNum
For Each Cel In Target.Offset(, OffsetNum * -1).Resize(, OffsetNum + 1)
Cel.Value = Mid(Text, TextPtr, 1)
TextPtr = TextPtr + 1
Next
Unload Me
End Sub
0290デフォルトの名無しさん
2014/08/09(土) 23:44:47.65ID:ZP+8lncrすまん、その通りにしたいんだ
0291デフォルトの名無しさん
2014/08/10(日) 01:48:01.15ID:efFeBW9z>>285のコードで不満なのか?
0292284
2014/08/10(日) 03:37:19.81ID:MFQAEfCR>>288の例2ではエラーが発生してるけど本当にそれでおkなの?
エラーってことはそこで処理が止まっちゃうけど。
要するに指定セルの左側にあるセルの数よりも
入力した文字の文字数が大きいと全部エラーが出るって事で良いの?
あと、複数のセルを選択した場合に
ユーザーフォームで得た値の出力がどうなるのか
全くイメージ出来ないんだけど、もうちょっと詳しく説明できる?
例えばE1とF11を選択した場合にどういう風に出力されるの?
あるいは、C1とD1を選択して入力文字数が2文字以上だと、D1からの出力分とC1からの出力分がダブるけどどうするの?
多分君はこういう事態は全く想定していないんじゃないだろうか?
それが悪いとは言わないけれど、仕様が曖昧なままでコードを書くことは出来ない(あるいはバグを内包したコードになる)よ。
まして自力で無く他人にコード書かせるなら、そういうあやふやな点はきちんと説明できるようにしないとダメだよ。
0293デフォルトの名無しさん
2014/08/10(日) 08:25:15.86ID:aTEKyeJh0294桃白白 ◆9Jro6YFwm650
2014/08/10(日) 08:33:25.52ID:ogxmV0hN0295桃白白 ◆9Jro6YFwm650
2014/08/10(日) 08:36:18.15ID:ogxmV0hN0296デフォルトの名無しさん
2014/08/10(日) 08:52:02.59ID:61oc51cO0297デフォルトの名無しさん
2014/08/10(日) 08:53:07.94ID:uVSascdBhttp://sagisyouzai-bokumetu.jp/wp-content/uploads/2014/07/fad93cc5.jpg
0298デフォルトの名無しさん
2014/08/10(日) 10:15:21.62ID:zo9IFsz+納得
0299デフォルトの名無しさん
2014/08/14(木) 01:14:57.69ID:vugbCcGA1月誕生日の誕生日?人みたいなプログラム作っているんだけど
1 |月 2|月
3 | 人 1|人 みたいな
Sub Sample1()
Dim i As Integer, a As Range, b As Integer, c As Integer
Dim r As Variant
''i 有給使用日カウント
''r 入力のカーソル
''k 誕生日月のカーソル
''a 誕生日があったら1を置く
''初期設定
ActiveWorkbook.Worksheets("入力").Activate
Set r = Worksheets("入力").Cells(1, 1 + i)
Set k = Worksheets("sheet2 ").Cells(2, 1)
Set a = Worksheets("sheet2 ").Cells(1, 1)
For b = 0 To 11
Call abc誕生日カウント(a, r, i, k)
k = k.Offset(0, 1) ''月を来月に
r = r.Offset(0, 1)
If r.Columns = 4 Then Exit For
Next b
End Sub
確かこんな具合で作ったんだが If r.Columns = 4 の所で「オブジェクトが必要です。」って言われるんだ
line制限で書けなかったがcallで読んだ先には「もしAさんの誕生月とkが指す数字が一緒だったら+1しろ」ってことが書いてある。
この場合 r がオブジェクトに指定されてないってことなのかな?
分かる人おしえてくれないか
0300デフォルトの名無しさん
2014/08/14(木) 01:31:14.73ID:vugbCcGA新しく入った会社が夏季休暇がなくて
有給使わないと夏休みが取れないと言われたことを考えてただけだ…
0301デフォルトの名無しさん
2014/08/14(木) 02:01:27.12ID:sRN+xfnpr = r.Offset(0, 1)
これ、Set使わんとrはオブジェクト(Range型)じゃなくなってるぞ
r.Offset(0, 1) のデフォルトプロパティが入ってる
0302デフォルトの名無しさん
2014/08/14(木) 02:13:07.14ID:EkQtydyGあるオブジェクトがあって、そのデフォルトプロパティが何なのかはどうやって調べますか?
たとえばRangeオブジェクトが1つのセルならデフォルトプロパティはそのセルの表示されてる値であろうということは予測できますが、それはどうやって予想を確信に変える?
0303デフォルトの名無しさん
2014/08/14(木) 03:01:42.47ID:sRN+xfnpまあ、イマイチ正確じゃないドキュメントもあるがな
Rangeのデフォルトプロパティとかその代表だがw
わからなければ使わなければ(省略しなければ)良いだけの話
0304デフォルトの名無しさん
2014/08/14(木) 03:10:36.61ID:sRN+xfnpただそのプロパティが何をしてるかは結局ドキュメント見ないとわからん
ドキュメントに書いてない事もあるけどな
0305デフォルトの名無しさん
2014/08/14(木) 08:54:16.00ID:EkQtydyGデフォルトプロパティがとれか印が書いてないのですが・・・
0306デフォルトの名無しさん
2014/08/14(木) 12:40:44.77ID:EkQtydyGどういうコードが一番シンプルですか?
0307デフォルトの名無しさん
2014/08/14(木) 13:04:50.98ID:OT/l+QiDこんなん
Sub macro1()
Dim a(2) '配列の準備
a(1) = "aaaa"
a(2) = "bbbb"
If InStr(Join(a, vbNullChar), "語句") Then
MsgBox ("入ってます")
End If
End Sub
0308デフォルトの名無しさん
2014/08/14(木) 13:43:42.84ID:EkQtydyGありがとうございます。
うまく動きますね。
ところで、<続>
0309デフォルトの名無しさん
2014/08/14(木) 13:45:57.96ID:EkQtydyGその理由はなんでしょうか?
■macro2の例→全く動かない
Sub macro2()
Dim a(2) As String '配列の準備
a(1) = "aaaa"
a(2) = "bbbb"
If WorksheetFunction.CountIf(a, "aaaa") Then
MsgBox ("トイレ入ってます")
End If
End Sub
■macro3の例→入っていない語句のときのみエラーが出る。
Sub macro3()
Dim a(2) As String '配列の準備
a(1) = "aaaa"
a(2) = "bbbb"
If WorksheetFunction.Match("aaaa", a, 0) Then
MsgBox ("トイレ入ってます")
End If
End Sub
0310デフォルトの名無しさん
2014/08/14(木) 14:46:46.30ID:Q87dIpVvトイレに入ってないから
0311デフォルトの名無しさん
2014/08/14(木) 21:16:38.99ID:JYipffjUC2、D1、F5に、ダブルクリックでセルの大きさに対応した楕円を描き、またダブルクリックで描いた楕円を消す
といった、処理をさせたいのですが、どのようなコードとなるのか教えて頂けないでしょうか?
0312デフォルトの名無しさん
2014/08/14(木) 22:35:34.52ID:vugbCcGAそれにプログラム挿入したほうが見やすくね?
0313デフォルトの名無しさん
2014/08/15(金) 00:31:11.29ID:pQdhaImpなるほど、ユーザーフォームを複数つくって呼び出したほうがコードも簡素化できそうですね
ユーザーフォーム1、ユーザーフォーム2をつくるとして
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Cancel = True
If Range("A1, A3, B2") = "" Then
UserForm1.Show vbModeless
End If
End Sub
ユーザーフォーム1は↑で呼び出せるのですが、C2、D1、F5セルをダブルクリックした場合にユーザーフォーム2を呼び出すには、どのようにしたら良いのでしょうか?
0314デフォルトの名無しさん
2014/08/15(金) 01:15:50.11ID:Vn0qGMis書いてみた。
https://friendpaste.com/6XXDDkcruUEuOAAVs7jVMp
ただし、楕円を表示しちゃうと
その下にあるセル部分をダブルクリックするのが非常に難しいので
実質的には楕円を消すことが出来ない。
セルの大きさを凄くでかくしとけば
楕円の外側にあるセル部分をクリックして楕円を消すことが出来る。
0315314
2014/08/15(金) 01:22:03.00ID:Vn0qGMisコード書いててリロードしてなかった……orz
もう問題は解決してるのかもしれないけど、
その>>313のコード正常に動く?
なんだか、
「A1が空白のときにダブルクリックでユーザーフォーム1を表示する」
っていうコードに見えるけど。
0316デフォルトの名無しさん
2014/08/15(金) 01:32:08.18ID:uZUnulqtユーザーフォームで処理する方針に変えたみたいだけど
ダブル・クリック版 折角作ったからさらしてみる(動かんかったらゴメン)
ダブル・クリックで消すときは"楕円の線の上" 以外で やる事
'Worksheet_BeforeDoubleClickの中へ書く
Dim Shape_Name As String
If Not Intersect(Target, Range("C2,D1,F5")) Is Nothing Then
Shape_Name = "楕円_" & Target.Address(False, False)
On Error Resume Next
Shapes(Shape_Name).Delete
If Err.Number = 0 Then
Cancel = True
Exit Sub
End If
On Error GoTo 0
With Shapes.AddShape(msoShapeOval, Target.Left, Target.Top, Target.Width, Target.Height)
.Name = Shape_Name
.Fill.Visible = msoFalse 'これ必須
End With
Cancel = True
Exit Sub
End If
0317デフォルトの名無しさん
2014/08/15(金) 07:07:55.68ID:obNCpe85webデータを取得したいですが参考になる物がなかったです。
複数のサイトから<h1>タグで囲ってあるデータを取得するマクロと言うものは作れないのでしょか?
0318デフォルトの名無しさん
2014/08/15(金) 08:29:35.96ID:Ue/3fnvo作れます
0319デフォルトの名無しさん
2014/08/15(金) 09:24:45.75ID:/EWeksvrスルーか作るかどっちかにして
0320デフォルトの名無しさん
2014/08/15(金) 11:53:10.30ID:ZPM3JqGz作りました
0321311
2014/08/15(金) 12:51:06.09ID:pQdhaImpご指摘の通り、こちらの意図したように動きませんでした。
A1、A3、B2をダブルクリックでユーザーフォーム1を呼び出し、
C2、D1、F5をダブルクリックでユーザーフォーム2を呼び出す
という処理をさせるにはどのようにしたら良いのか教えて頂けないでしょうか?
0322314
2014/08/15(金) 13:26:23.92ID:Vn0qGMis普通は>>314のコードとか>>316さんのコードみたいに
Intersectメソッドを使って判定します。
ダブルクリック時にクリックしたセルの情報は
引数Targetで得られますから、判別したいレンジと照合して
結果がNothingならば重複していない、Nothingでなければ重複している、
と言うことですから、重複していたら
UserForm1.Show
とか
UserForm2.Show
とかすれば良いだけです。
特に難しい事ではないと思いますよ。
0323デフォルトの名無しさん
2014/08/15(金) 21:56:55.82ID:43WXST3+無ければ"元"というシートをコピーして新たに作りたいです。
どちらの場合も継続処理なのですが
ネットでも本でも分岐したまま終わる例しかありません(on error goto)
どうしたら継続処理できますか?
--------------------------------------
On Error GoTo シート作成
Sheets("あああ").Select
〜いろいろする〜
exit sub
シート作成:
Sheets("元").Select
ActiveSheet.Copy After:=ActiveSheet
ActiveSheet.Name = "あああ"
〜いろいろする〜
exit sub
--------------------------------------
このように同じ記述を複数書くのはちょっと…
0324デフォルトの名無しさん
2014/08/15(金) 22:17:32.66ID:a/xxvuaUResume Next
まずちゃんと指定シートがあるかどうかチェックして、エラーが出ないようなコードを書くべきだと思うが
0325デフォルトの名無しさん
2014/08/15(金) 22:20:58.95ID:43WXST3+ごめんなさいまだまだ初級なものでして
resume next
だと、単にエラーを無視するだけなので場合分けにならないのではありませんか?
どこまでを無視してくれるのかも、よく分かりません
0326デフォルトの名無しさん
2014/08/15(金) 23:09:49.53ID:Vn0qGMisOn Error を使わなくとも、シートの存在を確認して
あればそのままSelect、無ければ作成してからSelectするってやり方もありますね。
シートの存在確認のやり方についてはここに書いてありました。
http://officetanaka.net/excel/vba/tips/tips10.htm
0327デフォルトの名無しさん
2014/08/15(金) 23:31:00.51ID:DQu/8q+yシートの最大数まで探してなければ、新規に作成
では、ダメですか?
0328デフォルトの名無しさん
2014/08/15(金) 23:31:04.41ID:43WXST3+そのサイトのやり方を試してみたら
For Each ws In Worksheets
の行で「型が一致しません」というエラーが出ました
エクセル2007でもできますか?
0329デフォルトの名無しさん
2014/08/15(金) 23:42:39.54ID:Vn0qGMisそれでも良いんじゃないですか?
>>328
私は2000ですけど2007でも出来るはずですよ。
エラーが出たとしたら
変数wsの型を間違えてるとかじゃないでしょうか。
0330デフォルトの名無しさん
2014/08/16(土) 00:20:38.57ID:Nmd3LyWL変数の宣言の仕方を事例どおりにしたらうまくいきました
カンマで区切って2つ同時に、
しかもsubの中というのは始めてです
ありがとうございました
0331デフォルトの名無しさん
2014/08/16(土) 00:33:45.00ID:3d9Onywuカンマ区切りは関係ないと思います。
Dim ws As Worksheet
Dim flag As Boolean
と書いても動くはずですよ。
あと、宣言の位置の違いは
その変数のスコープ(有効範囲)に関わるものですので
これまた型が違うというエラーとは関係ないと思われます。
Sub(Functionも同様、以下同じ)のなかで宣言したものはSubの中だけで有効になり
Subの外で宣言したものはそのモジュール内(またはもっと広い範囲)で有効です。
ちなみに、変数のスコープは可能な限り狭いほうが望ましいとされていますので
なるべくSubのなかで宣言したほうがよろしいですよ。
0332デフォルトの名無しさん
2014/08/16(土) 02:29:56.42ID:KZ6YPwzCエラーを無視するのはOn Error Resume Next
そうじゃなくて、エラー処理部分でResume Nextする
0333デフォルトの名無しさん
2014/08/16(土) 10:54:07.50ID:3d9OnywuSub test1()
Dim ShName As String 'シート名を指定するための変数
ShName = "a" 'シート名の指定
With ThisWorkbook
On Error Resume Next 'エラーを無視するように指定
Sheets(ShName).Select '指定されたシートを選択、この時点でシートが存在すればそれがアクティブになるが、存在していなければ別のシートがアクティブのまま
On Error GoTo 0 'エラー無視の状態を解除
If ActiveSheet.Name <> ShName Then 'アクティブなシート名の確認
Worksheets.Add after:=Sheets(Sheets.Count) '新たなシートを既存シートの末尾に追加
ActiveSheet.Name = ShName 'アクティブシートの名前を変更
End If '
'この時点で目的の名前のシートが選択されているので、好きなように処理をする
End With
End Sub
Sub test2()
Dim ShName As String
ShName = "b"
With ThisWorkbook
On Error GoTo Err: 'エラーが出たらエラー処理に飛ぶ
Sheets(ShName).Select
On Error GoTo 0
'この時点で目的の名前のシートが選択されているので、好きなように処理をする
End With
Exit Sub
Err: 'エラー処理
Worksheets.Add after:=Sheets(Sheets.Count)
ActiveSheet.Name = ShName
Resume Next 'エラー発生の次の行に戻る
End Sub
0334デフォルトの名無しさん
2014/08/16(土) 11:18:25.40ID:hxl4RJQ8どうやるのですか?
0335デフォルトの名無しさん
2014/08/16(土) 11:20:03.07ID:hxl4RJQ8Dim a As Range
Set a = Sheets(1).Range(Cells(1, 1), Cells(2, 2))
End Sub
この単純なコードが、もしSheets(1)をアクティブにしてる状態で実行するとエラーは出ないのに、他のシートをアクティブにしてるとエラーが出るのはなぜですか?
0336デフォルトの名無しさん
2014/08/16(土) 11:44:20.89ID:axhzvrnk0337デフォルトの名無しさん
2014/08/16(土) 11:47:23.11ID:jCALR/yC0338デフォルトの名無しさん
2014/08/16(土) 12:15:35.99ID:hxl4RJQ8いえかぶってございません。
一番シンプルにした上のコードでやってもエラーがでるのです。
0339デフォルトの名無しさん
2014/08/16(土) 12:21:30.97ID:3d9OnywuSheets(1)以外がアクティブな状態で、
Set a = Sheets(1).Range(Cells(1, 1), Cells(2, 2))
だとエラーになるけど、
Set a = Sheets(1).Cells(1, 1).Resize(2, 2)
ならエラーにならない。
なぜそうなのかの理由は分からない。
0340339
2014/08/16(土) 12:26:32.73ID:3d9OnywuSheets(1)がアクティブな状態では
Set a = Sheets(1).Range(Cells(1, 1), Cells(2, 2))
と書けば
Set a = Sheets(1).Range(Sheets(1).Cells(1, 1), Sheets(1).Cells(2, 2))
の意味になるが、
Sheets(1)以外がアクティブだと(たとえばSheets(2) がアクティブなら)
Set a = Sheets(1).Range(Sheets(2).Cells(1, 1), Sheets(2).Cells(2, 2))
と言う風になっちゃうからエラーが出るんだ。
0341339
2014/08/16(土) 12:47:19.68ID:3d9OnywuCells()の部分がポイントで、
Cells(1, 1)
とはすなわち
ActiveSheet.Cells(1, 1)
を意味している訳だ。
だから、Sheets(1)の "A1:B2" をRange型のオブジェクト変数 "a" に入れたいなら
Dim a As Range
Set a = Range(Sheets(1).Cells(1, 1),Sheets(1).Cells(2, 2))
とするべきで(もちろん>>339にも書いたように他のやり方も有るけど)、
Rangeの前のSheets(1)は不要だし、無意味ってことになる。
0342デフォルトの名無しさん
2014/08/16(土) 13:08:43.81ID:qDOV6aef0343339
2014/08/16(土) 13:29:52.22ID:3d9Onywu0344桃白白 ◆9Jro6YFwm650
2014/08/16(土) 13:34:23.26ID:bhW99ao70345デフォルトの名無しさん
2014/08/16(土) 13:35:21.31ID:3d9Onywu0346デフォルトの名無しさん
2014/08/16(土) 13:52:06.56ID:qDOV6aef0347339
2014/08/16(土) 14:01:12.31ID:3d9Onywuそれは違うでしょう、現に質問があったわけですから。
私もこの質問が出るまでそんなこと意識して無かったですし。
私や質問者のレベルが貴方もしくは貴方の想定レベルよりも
低いと仰りたいならそれは構いませんが、
それをここに書き込むことに意義があるとも思えないです。
0348デフォルトの名無しさん
2014/08/16(土) 14:33:26.47ID:nQiWsyll0349デフォルトの名無しさん
2014/08/16(土) 19:53:42.11ID:KZ6YPwzC>Cells(1, 1)
>とはすなわち
>ActiveSheet.Cells(1, 1)
>を意味している訳だ。
そうとも限らんがな
Sheet1のモジュールに書いたCellsはアクティブ関係なくSheet1.Cellsの意味だ
0350デフォルトの名無しさん
2014/08/16(土) 20:33:56.39ID:3d9Onywuあぁ、そういえばそうですね。
標準モジュールのことしか想定してませんでした。
ご指摘ありがとうございます。
0351デフォルトの名無しさん
2014/08/16(土) 22:58:41.93ID:hxl4RJQ8すばらしい!
頭がさえていますね。
0352デフォルトの名無しさん
2014/08/16(土) 23:16:12.48ID:nQiWsyll0353デフォルトの名無しさん
2014/08/16(土) 23:29:50.98ID:hxl4RJQ8オブジェクト変数を上部の定義部分で定数(Const)として宣言したいのですができません。
どうやるのですか?
0354デフォルトの名無しさん
2014/08/16(土) 23:41:01.27ID:3d9Onywuググッたけどオブジェクト型は定数に出来ないらしいです。
http://www.tipsfound.com/VBA/02006.vbhtml
ここに
>定数は数値や日付、文字列などの値型を設定できます。Object 型は定数にできません。
と書いてありました。
0355デフォルトの名無しさん
2014/08/17(日) 21:16:46.02ID:rFyPTDFj名前だけ変えて印刷を100枚くらいしたい
エクセルからワードは簡単に行けるのになんでエクセルからエクセルだと難しいんだよ!
0356デフォルトの名無しさん
2014/08/17(日) 21:18:46.49ID:sI1u/7Zz0357デフォルトの名無しさん
2014/08/17(日) 22:55:02.54ID:Z18r2/7O名前だけ変えて印刷を100枚くらいしたい
エクセルからワードは簡単に行けるのになんでエクセルからエクセルだと難しいんだよ!
0358デフォルトの名無しさん
2014/08/17(日) 23:19:56.89ID:goK70HR7素直にワード使ったら良い気がするけど、エクセルでやりたい人もいるみたいね
http://oshiete.goo.ne.jp/qa/3597313.html
0359デフォルトの名無しさん
2014/08/17(日) 23:25:16.16ID:sI1u/7Zz0360デフォルトの名無しさん
2014/08/18(月) 20:34:57.70ID:dWD6IcGeDim t as Range, a As Integer,b as Integer
Set t = Cells(1,1)
For a = 0 to 20
t =Cells(1 + b ,1 +a)
Next a
こんな式があるとして
もし列が10行目に来たらb = b+1 をしたいんだがどう書けばいんですかね?
0361デフォルトの名無しさん
2014/08/18(月) 21:54:37.38ID:1WOkYmL9b = b + 1
end if
とか?
0362デフォルトの名無しさん
2014/08/18(月) 23:42:48.49ID:BUu0R5S/対数グラフを書き続けるのですが
計算値によってはエラーのダイアログが出ることが1000回に1回くらいあります。
OKボタンを押せばそのまま継続されるのですが
外出している間に作業させているとそこで止まってしまいます。
グラフの描写はVBAによるものではなく、
VBAの計算によってオマケで描かれるものなので
どうやって制御していいかわかりません。
�@エラーダイアログを出さない方法
�Aダイアログが出ても自動でOKボタンを押してくれる方法
いずれかをご教授いただきたくよろしくお願いします。
0363デフォルトの名無しさん
2014/08/19(火) 01:17:29.19ID:byB5OjGwどこから何のエラーが出てるのかわからんのに何とも言えんわ
とりあえずOn Error Resume Nextでも使っとけ
0364デフォルトの名無しさん
2014/08/19(火) 07:53:42.55ID:Oggs/IzOエラーが出てから対処するのはあくまでも次善の策であって、
本質的にはエラーを出さないようにするべきです。
エラーの出る理由や場所が分かっているならその部分の改善を目指しましょう。
なんにせよ、もっと具体的に情報(実際に使用しているコードなど)を開示しなければ
こういう通り一遍のアドバイスしか回答出来ないですね。
0365デフォルトの名無しさん
2014/08/19(火) 10:21:01.79ID:d+6xgAf5VBAのエラーでは使ったことないけど、uwscっていうフリーウェアで
「いつ出るかわからないダイアログを監視してOKボタンを押す」ってのをやったことならある
0366デフォルトの名無しさん
2014/08/19(火) 11:04:04.78ID:PkLqxymbOSはwondows8.1 で、excel2013です。
エクセルからIEに繋いで下記サイトへの自動ログインを考えています。
フォーム入力はできたのですが、ログインボタンのクリックができません。
参考書や検索をしてみたのですが、分からなかったのでよろしくお願いします。
https://espc.jip-jet.ne.jp/login.con?code=063
0367362
2014/08/19(火) 17:11:31.35ID:eQam0mnsエラー内容は
「負の数値またはゼロは、対数グラフに正しくプロット されません。
対数目盛では、正の数値だけが有効です。」
計算上、ゼロが出てくるパターンは避けられないのです。
for nextで
パラメータを変えながらある計算ルーチンを3000回くらいします
その過程でグラフを作成するのですが
パラメータによってゼロ計算が出てしまうのです。
ルーチンからグラフ作成を外せば?という意見があると思いますが
パラメータをVBAじゃなくて手入力で入れてみて
結果を見てみたいときもあるので、
グラフはそのまま残したいのです。
VBAと手入力は別ファイルでやれば?という意見もあると思います。
だけど、カスタマイズするときに、そのたびに
両方のファイルを同じようにいじらなければいけなくなります。
そのため、VBAを動かしているときは、このエラーを出ないようにさせたいのです。
エラーが出るのは、3000回のうち、数回程度。
よろしくお願いします。
0368デフォルトの名無しさん
2014/08/19(火) 17:39:28.42ID:Sw28RQP50369364
2014/08/19(火) 18:17:45.47ID:Oggs/IzO計算とグラフの表示をともにVBAでやらせているのならば、
グラフプロット前にデータをチェックして、
不正な値が含まれている場合にグラフの表示をキャンセルすれば
良いのではないですか?
グラフを表示させる前にグラフにする範囲(Range)に含まれるデータが
正の値かどうかをチェックするだけですから、それほど難しくなさそうですが。
0370デフォルトの名無しさん
2014/08/19(火) 18:37:42.08ID:Sw28RQP5俺の過去の案件では、予めリニアと対数の切替機能があって、0が含まれたデータを読み込んだ場合は、ダイアログで通知するとともにリニアグラフとして対応させてたわ。
0371デフォルトの名無しさん
2014/08/19(火) 19:51:04.91ID:eQam0mnsどうやってキャンセルできるのでしょうか?
VBAが、あるセルにパラメータを入れることで
他のシートやセルのデータを読み込んで計算をします
その結果、すでに作られているグラフの
元データの範囲のデータが入れ替わります
そのため、自動的にグラフが描かれます
つまり、グラフを描いているのはVBAではなく、
パラメータを入れた後の計算式です
なので、エクセル側?が計算するまでは
入力値ゼロになるかどうかは分かりません
VBA側で判断することはできません
(あるセルの範囲がゼロだったら…という読み込みをやる前に
エラーダイアログは出てきてしまうのですから)
0372デフォルトの名無しさん
2014/08/19(火) 20:05:41.34ID:byB5OjGw0373デフォルトの名無しさん
2014/08/19(火) 20:23:51.96ID:eQam0mnsSheets("記録").Select
a = Cells(h, 3)
b = Cells(h, 4)
c = Cells(h, 5)
Sheets("計算").Select
Cells(4, 40) = a
Cells(5, 40) = b
Cells(6, 40) = c
Calculate
最終値 = Cells(7, 30)
最大値 = Cells(8, 30)
合計値 = Cells(9, 30)
Sheets("記録").Select
Cells(h, 7) = 最終値
Cells(h, 8) = 最大値
Cells(h, 9) = 合計値
Next h
おもいきり簡略化してます。
記録シートのh行からパラメータabcを読み込んで計算シートに代入すると、
エクセルが自動計算するので最終値などの結果を読み込み、それを記録シートのh行に記録
これを計算開始行から計算終了行まで数千回繰り返して
パラメータの変化に対する最大値等の変化の一覧表ができます
calculateで計算した時に、数千個のアウトプットを計算シートの11行以降に吐き出します
最大値・合計値というのはそれらの最大値、合計値です
それら数千個のアウトプットとした元データであらかじめセットされているグラフシートにグラフが描かれます。
0374デフォルトの名無しさん
2014/08/19(火) 20:44:49.64ID:byB5OjGwどうやってグラフ書いてるのかわからんのだが
ゼロが書けないグラフなのに、データがゼロになったときはグラフはどうしたいんだよ
0375デフォルトの名無しさん
2014/08/19(火) 20:49:30.17ID:v2QnjHZ20376デフォルトの名無しさん
2014/08/19(火) 20:52:46.50ID:eQam0mnsこれまで記載したとおり、
・グラフの元データは、計算シートの11行〜5000行に計算されたデータが元になります
パラメータが変わるたびに、グラフの形が変わります
・VBAでグラフを描くのではなく、エクセル側?で既にグラフはセットされていて、その元データが書き換わるだけです
・パラメータによってはデータにゼロが含まれることがあるので仕方がありません
グラフはそのゼロの部分は記載されませんが、それで構いません
・forループでグラフはころころ書き換わるのですが、グラフが目的ではないのでスルーでいいのです
だからエラーダイアログなど出なければ問題ないのです
エラーダイアログでVBAが中断することが問題なのです
・グラフを外せば、という意見もありますが、パラメータ入力を手入力してグラフの様子を見てみたいときがあるので避けたいのです
・手入力とVBA用に分ければ、という意見もあるでしょうが、両方のファイルを同じように修正を加えるのは大変なので
そのまま保持したいのです
・VBAの時だけデータ範囲から外せば、という意見もあるでしょうが、要は何回もやることなので、その手間を簡略化したいのです
そのためのVBAだと思っています
0377362
2014/08/19(火) 21:07:40.90ID:eQam0mns�@VBAで、ダイアログを出さないようにする
エクセル側のエラーでもOn Error Resume Nextは有効なのでしょうか
On Error Resume Nextは使い方がいまひとつ理解できないので
具体例を記載していただけると助かります。
�AVBAで、エラーが出ても自動でOKを押すようにする
�Bそもそもエクセル側のオプションなどでエラーが出ないようにする
0378デフォルトの名無しさん
2014/08/19(火) 21:16:51.60ID:byB5OjGw>グラフはそのゼロの部分は記載されませんが、それで構いません
ゼロじゃなくてブランクセットすれば良いだけじゃないのか
0379デフォルトの名無しさん
2014/08/19(火) 21:27:10.37ID:byB5OjGwVBAでセットしてるなら
Range(場所).Value = ""
計算式いれてるならブランクはダメっぽいからNAで
=IF(式>0,式,NA())
これ以上はもう知らん
0380デフォルトの名無しさん
2014/08/19(火) 21:30:34.34ID:08bxuLe5On Error Resume Next
を入れまくれよ
0381デフォルトの名無しさん
2014/08/19(火) 21:37:05.91ID:byB5OjGw試した範囲では、1回出ると、ブック開きなおすまで出ないから、単なるエラーじゃなさげ
どっかに制御するプロパティ有るかもしれんが見つけられんしどうでもいい
0382デフォルトの名無しさん
2014/08/19(火) 21:48:07.44ID:eQam0mnsわかりづらかったようですみません
エクセルの関数が入っています
なので、パラメータが入力された時点で自動計算されます
あちこちからデータを読み込で、順次計算されていくので
簡単に標記できるものではありませんが…
マイナス値になることもあって、そのデータがその後も使われるので
(n行目のデータと別途シートにあるデータベースとパラメータから
n+1行目のデータを求める)
ゼロをブランクにするわけにはいきません
数値は厳然たる結果なのでいじりたくないのです
他への影響が甚大ですから
ダイアログさえ出なければいいのです
対数グラフを使うな、というのも、目的が果たせないので申し訳ないですが受け入れられません
>>381
そういうことです
VBA側のエラーじゃないようなので、VBAで制御できるものなのか?
0383デフォルトの名無しさん
2014/08/19(火) 21:51:27.92ID:sAVp/1/iだったらデータいじっても変わらんだろが
お前バカだろ?
0384デフォルトの名無しさん
2014/08/19(火) 21:52:57.35ID:eQam0mns>>376を読んでください わかりづらい文章で申し訳ないですが
無視でいいんですよ
ダイアログでプログラムが中断されることが問題なのです
0385デフォルトの名無しさん
2014/08/19(火) 21:56:49.56ID:i6BfdF310386デフォルトの名無しさん
2014/08/19(火) 21:57:37.66ID:zpP/a0kx0387デフォルトの名無しさん
2014/08/19(火) 21:58:48.96ID:byB5OjGw>そのデータがその後も使われるので
計算に使うセル(列)と別に、グラフ表示に使うセル(列)を用意して>>379の計算式入れるだけ
0388デフォルトの名無しさん
2014/08/19(火) 22:04:16.83ID:byB5OjGw俺が試した範囲ではDisplayAlerts は効いてなかった
つかあれ、グラフ側で出してるメッセージじゃないかと思うんだが確証はない
0389デフォルトの名無しさん
2014/08/19(火) 22:09:01.75ID:eQam0mnsCells(2,2)=Err.Numberがずっと0のままなので、まだ出てきてないようです
0390デフォルトの名無しさん
2014/08/19(火) 22:10:11.54ID:eQam0mnssoreda!
0391デフォルトの名無しさん
2014/08/19(火) 23:38:55.49ID:eQam0mns>>387でしのごうと思います
ありがとうございました
0392デフォルトの名無しさん
2014/08/20(水) 23:43:13.50ID:k3LytTVX検索しても欲しい情報がなくて、とても困っています。
0393デフォルトの名無しさん
2014/08/21(木) 10:31:58.13ID:j5D+Vhv3俺はSiebelって何の事だかすら知らないけど、
Siebel VBA でぐぐったら英語のページが結構あった。
例えばこんなの
http://it.toolbox.com/blogs/siebel-answers/example-siebel-scripting-through-ms-excel-siebel-com-data-server-26861
VBAのコードには英語も日本語も関係ないので、多少なりとも参考に出来ると思う。
0394デフォルトの名無しさん
2014/08/21(木) 21:55:37.19ID:787FWODnSiebel知らないが、コントロールするってことはOLEオートメーション?
Siebel側が用意しているメソッド的なのを使用するんなら
頑張って調べるしかないかも
0395デフォルトの名無しさん
2014/08/21(木) 22:49:37.71ID:j8w9O0B2ありがとう。そう英語のページではありますね。ただ英語の理解力が高くないので
正確な情報が得られず、時間がかかってしまっていて。
リンク先、参考になりそうです。
>>394
頑張って調べます!
THX
0396デフォルトの名無しさん
2014/08/22(金) 15:37:07.44ID:cJuKMHCG0397デフォルトの名無しさん
2014/08/22(金) 23:24:39.41ID:i1hH/9ZVインターネットにはつながっていないときを想定してください。
0398デフォルトの名無しさん
2014/08/22(金) 23:25:32.20ID:i1hH/9ZV0399デフォルトの名無しさん
2014/08/22(金) 23:28:35.14ID:i1hH/9ZV0400デフォルトの名無しさん
2014/08/22(金) 23:34:33.47ID:PDdg7gyz0401デフォルトの名無しさん
2014/08/22(金) 23:36:24.85ID:i1hH/9ZV0402デフォルトの名無しさん
2014/08/22(金) 23:39:50.40ID:vApx1yi7ヘルプでしょ(使い方のってるし)
後は
VBE のオブジェクトブラウザ
0403デフォルトの名無しさん
2014/08/22(金) 23:42:59.51ID:i1hH/9ZVすばらしい!
そのオブジェクトブラウザをいろいろ探してたのですが
そのどこに載っているのでしょうか?
0404デフォルトの名無しさん
2014/08/22(金) 23:45:07.66ID:i1hH/9ZV0405デフォルトの名無しさん
2014/08/22(金) 23:53:15.53ID:i1hH/9ZVFindという関数を使いたくなったとき、その引数の種類や引数になにを代入するかはどうやって調べますか?
xlWholeやxlPartという定数の文字列を忘れたときどう思い出す(どう調べる)か、とかそういうことって頻繁にありますよね?
この答じゃなくどうやって調べるかを知りたいのです。(そうじゃなきゃ毎回ここ2chで質問することになりますしね)
0406デフォルトの名無しさん
2014/08/22(金) 23:57:01.07ID:i1hH/9ZVなんと「XlLookAtはクラス」であることがわかりました。
それでオブジェクトブラウザで検索するとXlLookAtというクラスがでてきたのですが
クラス名がたくさんリストで出ているその左側に小さなクラスをあらわしているように思われるアイコンが3種類あるのですが
この3種類のそれぞれの違いってなんでしょうか?
0407デフォルトの名無しさん
2014/08/22(金) 23:58:13.42ID:i1hH/9ZVModule
Enum
の3つのような気がしてきましたが・・・
0408デフォルトの名無しさん
2014/08/23(土) 00:01:22.74ID:i1hH/9ZV====================================================================================================================
Property Address([RowAbsolute], [ColumnAbsolute], [ReferenceStyle As XlReferenceStyle = xlA1], [External], [RelativeTo]) As String
読み取り専用
Excel.Range のメンバ
====================================================================================================================
このAddressはなぜプロパティなのに引数があるのですか?
引数になにを代入してやればいいかはどうやって調べますか?
0409デフォルトの名無しさん
2014/08/23(土) 00:04:19.93ID:MQkGQoaj>>397 >インターネットにはつながっていないときを想定してください。
この想定だと
>>405 >そうじゃなきゃ毎回ここ2chで質問することになりますしね
これも無理じゃね
2chで質問する=インターネットにはつながっている(携帯であれなんであれ)
0410デフォルトの名無しさん
2014/08/23(土) 00:19:17.52ID:Lda5wphaそうじゃなきゃリファレンス的な本を買っとけとしか
0411デフォルトの名無しさん
2014/08/23(土) 01:08:52.84ID:atKdjfd4もし同数ならその旨のメッセージを表示させます。
0412デフォルトの名無しさん
2014/08/23(土) 01:12:26.98ID:atKdjfd4ちょっと違うけど
例えばSheet1に巨大な名簿があって、そこに名前や出身県や血液型などが書いてあって
任意の県、例えば「千葉県」「滋賀県」「佐賀県」で調べるとその出身の人々が抽出され、その人々の血液型を調べ、一番出現頻度が多い血液型はなにかを調べるコード。
もしA型とB型が同人数の10人だとすれば「同数のため最頻出のものは決まりません」とメッセージが出る。
0413デフォルトの名無しさん
2014/08/23(土) 04:25:30.77ID:MQkGQoajその例でいうと
各県で 何度も Sheet1で調査すると 検索事態大変だから
1)ピポットテーブル(県名と血液型の人数)を 別シートに VBA(又は手作業)で作成
行:県名
列:血液型
で 人数を集計したもの
2)その ピポットテーブルを VBAで検索する
ピポットテーブル用のプロパティもあるけど
普通のRANGE操作も 可能のハズ
0414デフォルトの名無しさん
2014/08/23(土) 06:16:16.76ID:8RITjdqMすくなくとも2007までのヘルプはインターネット繋がってなくても使える(ように設定できる)
それ以降のバージョンならしらね
>>406
XlLookAtはクラスじゃなくて列挙のはずだが
どうやって調べてそう言う結論に至ったのか
オブジェクトブラウザのアイコンは3種類じゃなくてもっとあるが
モジュールのアイコンってあったっけ?
良く見るのはクラス、プロパティ、メソッド、列挙、定数 ぐらいじゃね
>>408
プロパティは普通に引数とれる
引数の意味は普通はヘルプにかいてある
お前はオブジェクトブラウザよりヘルプのみかた覚えろ
0415デフォルトの名無しさん
2014/08/23(土) 06:19:17.21ID:8RITjdqMどうしてもVBAだけでやりたかったらベタに数えるしかないけど
なんとかIF系のワークシート関数でやれば良いんじゃないかな
0416デフォルトの名無しさん
2014/08/23(土) 06:50:14.97ID:SD9EMvG32010もネット接続なくてもヘルプは表示できる
こんなふうに全関数の一覧とか出る
http://www.42ch.net/UploaderAnime/source/1408744163.png
0417デフォルトの名無しさん
2014/08/23(土) 08:32:25.60ID:rRuNrHr1au氷水ディレクター戦争指名タイステーキ万国ニューヨークブカ牛肉直輸出制限業者議論病院雇用市議しょうゆダシマクッロスさむらい山雪光金ガンダム風ミックドラ社員あかうんとパズ豚骨のり肉マンつばめの巣塩担々麺野菜炒めラーメン
au氷水ディレクター戦争指名タイステーキ万国ニューヨークブカ牛肉直輸出制限業者議論病院雇用市議しょうゆダシマクッロスさむらい山雪光金ガンダム風ミックドラ社員あかうんとパズ豚骨のり肉マンつばめの巣塩担々麺野菜炒めラーメン
ニンニクヤーフォー低額土地NHK名古屋遅延電池切れ福岡損保新規駐車近代ゲームフジワイプ転職提案ラーメン
abk公式漏洩安保険王なにあげてんだよ?「わー!ふーう?」↓↓★★↓↓宿題通調印鑑カウントダウン息子議員国会大学生
0418デフォルトの名無しさん
2014/08/23(土) 22:22:11.08ID:Lda5wphaPublic Const name_retu As Integer = 3
Public Const shubetu As Integer = 4
Sub test1()
Columns("B:C").ColumnWidth = 15
End Sub
Columns("B:C").ColumnWidth = 15
をConstで指定した名前を使って書き換えること出来ませんかね?
0419デフォルトの名無しさん
2014/08/23(土) 22:42:51.95ID:atKdjfd4とすればいいじゃないか
0420デフォルトの名無しさん
2014/08/23(土) 22:44:38.94ID:atKdjfd4そのヒッポリト星人ってなんなの?
>>415
それは面倒だけどCountif関数を使うってこと?
本当にそんな面倒な方法しかないの?
0421デフォルトの名無しさん
2014/08/23(土) 22:56:09.91ID:Lda5wphaあ〜すいません、書き方が悪かったか。
Columns(folder_retu:name_retu ).ColumnWidth =15
見たいにB,Cと言った列名をConstで定義したものに置き換えることは出来ないか…ということ
なんですが。
これだと
アプリケーション定義またはオブジェクト定義のエラーです。
になってしまうんですけどね
0422デフォルトの名無しさん
2014/08/23(土) 22:58:39.03ID:atKdjfd4Cells(1,folder_retu:name_retu).Entirecolumn.ColumnWidth =15
とすればいいじゃないか。
0423デフォルトの名無しさん
2014/08/23(土) 23:04:37.75ID:Lda5wphaすんませんが、構文エラーになりますorz
0424デフォルトの名無しさん
2014/08/23(土) 23:11:04.39ID:6csT3QKU0425デフォルトの名無しさん
2014/08/23(土) 23:20:46.87ID:atKdjfd4Range(Cells(1, folder_retu:), Cells(1, name_retu)).ColumnWidth = 15
とすればいいじゃないか。
0426デフォルトの名無しさん
2014/08/23(土) 23:21:52.18ID:atKdjfd40427デフォルトの名無しさん
2014/08/23(土) 23:25:55.59ID:Lda5wpha出来ました。ありがとう!です
0428デフォルトの名無しさん
2014/08/23(土) 23:50:24.47ID:atKdjfd4見れないですよ
0429デフォルトの名無しさん
2014/08/24(日) 07:59:27.36ID:d+P1Wor6明確な仕様が知りたくても曖昧なことがちょろちょろある
0430デフォルトの名無しさん
2014/08/24(日) 10:18:50.31ID:orIfuAvn単なるヘルプ画面のスクショですよ
ここなら見られるかな
http://www.07ch.net/up2/src/lena12426.png
0431デフォルトの名無しさん
2014/08/24(日) 17:04:39.21ID:UwvYeLgq0432デフォルトの名無しさん
2014/08/24(日) 17:05:45.84ID:UwvYeLgq&の文字が入った文字列を"&"& という形で連結するとエラーが出ます。
&も文字をうまく連結させる方法を教えて下さい。
0433デフォルトの名無しさん
2014/08/24(日) 17:25:50.36ID:orIfuAvn文字列と何を連結するとエラーになるんだ?うちじゃ再現できないぞ
よくある、&記号の前にスペースを入れ忘れてるだけの話じゃないの?
0434デフォルトの名無しさん
2014/08/24(日) 20:47:40.01ID:sJkzEST8Type Person
Name As String
Age As Integer
End Type
Sub Test()
Dim Student(50) As Person
Dim i As Integer
For i = 1 To 50
Student(i).Name = Cells(i, 1)
Student(i).Age = Cells(i, 2)
Next i
End Sub
この配列変数StudentのメンバNameの文字列で昇順で配列として並べ替えるにはどうすればいいですか?
Student(1).Nameが「あ」ではじまる名前、Studemt(50).Nameが「渡辺」さんみたいに。
0435デフォルトの名無しさん
2014/08/24(日) 20:55:23.10ID:8IMXYDXG仮でも、Name As Stringはちょっと
0436デフォルトの名無しさん
2014/08/24(日) 21:19:58.58ID:0LQb+wexワークシート上でソートしてから配列に入れるほうが簡単
どうしてもVBAで実現したいとなると自分でソートのコードを書かないといけない
0437デフォルトの名無しさん
2014/08/24(日) 21:38:15.33ID:sJkzEST8なぜ?普通だと思うけど。逆に他にありえなくない?
>>436
やはりそうなのですか。
でももしそうするとダミーのブックを開き、そこで作業して、さいごにダミーのブックを閉じることまでコードに書かないといけないということ?
0438デフォルトの名無しさん
2014/08/24(日) 21:45:54.34ID:LyXUXpKWんで作業が終わればそれを消すと。
自前でソートするならそのコードを書かなければならないのは当然
マクロの記録を使ってそれを修正した方が楽だと思うけど
0439デフォルトの名無しさん
2014/08/24(日) 23:10:58.25ID:d+P1Wor6読みでソートするなら読みも格納しないと難しい気がする
0441デフォルトの名無しさん
2014/08/24(日) 23:34:21.90ID:orIfuAvn0442デフォルトの名無しさん
2014/08/25(月) 02:19:07.38ID:rYG7E1wEバブルソートでもクイックソートでもググったらコード転がってるのに
0443桃白白 ◆9Jro6YFwm650
2014/08/25(月) 07:48:25.99ID:S6btknby辞書順じゃなくて字の読み順ってことでござろう
0444デフォルトの名無しさん
2014/08/25(月) 16:44:31.10ID:COD1vbGg辞書順と読み順はおんなじだってば
それを言うなら文字コード順でしょ
0445デフォルトの名無しさん
2014/08/25(月) 16:45:54.11ID:COD1vbGgソート機能ぐらい標準で用意しとけってことだよいわ
0446デフォルトの名無しさん
2014/08/29(金) 09:24:49.50ID:QjLb8wHhフォームに「ラベルとテキストボックス」のペアを好きな数だけ貼り付けるにはどうしますか?
そのいくつあるかわからない「ラベルとテキストボックス」の直下にボタンを配置もしたいんです。
0447デフォルトの名無しさん
2014/08/29(金) 09:52:08.01ID:QjLb8wHh0448デフォルトの名無しさん
2014/08/29(金) 11:16:24.94ID:Wh8kLZnh位置決めとかフォーム自体のサイズ変更とか色々考えるのがメンドイから、
大きめのサイズでフォーム作っといて、
ラベルやテキストボックスも多めに作っといて、
使わない分はEnableとVisibleをFalseにしておく
0449デフォルトの名無しさん
2014/08/29(金) 11:56:20.42ID:QjLb8wHhお言葉だけはありがとうございます。感謝いたします。
しかし、使う数は1個から無限個まで考えられるので
あらかじめ作るというのは避けたいのです。
わたしのプログラミング哲学の観点からも
そういうのはダサいのでやりたくないですし。
0450デフォルトの名無しさん
2014/08/29(金) 11:57:35.82ID:QjLb8wHh0451デフォルトの名無しさん
2014/08/29(金) 12:17:31.93ID:/kCif9fN0452デフォルトの名無しさん
2014/08/29(金) 13:02:35.63ID:QjLb8wHh0453デフォルトの名無しさん
2014/08/29(金) 13:26:14.05ID:/kCif9fN0454デフォルトの名無しさん
2014/08/29(金) 14:47:36.87ID:YpEKIFZT永続的に残るんだっけ?
0455デフォルトの名無しさん
2014/08/29(金) 15:23:13.94ID:QjLb8wHhこら、まじめにしろ。
0456デフォルトの名無しさん
2014/08/29(金) 15:38:15.25ID:DFGfbiHv0457デフォルトの名無しさん
2014/08/29(金) 15:53:03.64ID:QjLb8wHh0458デフォルトの名無しさん
2014/08/29(金) 22:15:55.57ID:A4wUco5H質問するレベルで何が私のプログラミング哲学だこのやろー(笑)
0459桃白白 ◆9Jro6YFwm650
2014/08/29(金) 22:50:57.59ID:ppLa6QHv質問するからってレベル低いわけじゃないよ。
質問することって答えることより難しいんだよ。
答える方は殿下の宝刀ググレカスが使えるし。
ところで殿下の宝刀って間違いなく股間の一物のことです。
以上よろしくお願いいたします。
0460デフォルトの名無しさん
2014/08/30(土) 09:36:59.40ID:jOCOz69P0461デフォルトの名無しさん
2014/08/30(土) 10:41:47.87ID:WQwTEzR3A B C (上のABCが列で左の123が行です)
1 木 草 花
2 1 2 3
3 2 3 4
こんな感じで列毎で銘柄があり、行には1〜5までの数字が入っていきます。
この前提で、各銘柄毎に1〜5がそれぞれいくつあるかがわかるVBAが組みたいです。
やさしいかた、作ってもらえないでしょうか?
ちなみに今は、1行目をオートフィルタして、最後の行にサブトータル関数を使い
各列毎に1〜5のフィルタするというめんどいことしてます。
0462桃白白 ◆9Jro6YFwm650
2014/08/30(土) 10:53:15.74ID:CGzN53tJナイスクエッション!
桃白白も挑戦しちゃう
0463デフォルトの名無しさん
2014/08/30(土) 10:55:24.39ID:mX0xam8lわざわざVBA使わんでもcountifでいいじゃん
0464461
2014/08/30(土) 12:17:33.61ID:WQwTEzR3countif関数を知らなくて、調べてみました。
これは便利ですね。これを使えば、オートフィルタがいらないですね。
ただ、銘柄が実際はもっと複数あり、定期的に集計がいるので
VBAを作りたいと思っています。
>>462
桃白白さんありがとうございます。挑戦お願いします!
0465デフォルトの名無しさん
2014/08/30(土) 12:57:18.19ID:YUBmgqqm0466デフォルトの名無しさん
2014/08/30(土) 13:17:09.52ID:wlhWYKB3あほ。
それならすべてグーグルで解決するわ。
0467デフォルトの名無しさん
2014/08/30(土) 13:22:38.28ID:vWLdYDcCだな。ここで質問するのはググるのさえ面倒な時だけだし
0468デフォルトの名無しさん
2014/08/30(土) 15:09:19.48ID:jOCOz69Pならググレよ
面倒とかそっちの都合なんか知るか
ボケ
0469デフォルトの名無しさん
2014/08/30(土) 15:54:22.31ID:YUBmgqqm>ここで質問するのはググるのさえ面倒な時だけだし
迷惑極まりないし、ググるのが面倒??
全く理解出来ないね
0470デフォルトの名無しさん
2014/08/30(土) 17:23:16.94ID:BrsM5WtFどういう風に結果表示させたいんだ?
シートに結果表示するならそれこそCountIfだけでいいぞ
まあ暇なんでちょっと作ってみた
Dim c As Long
Dim i As Long
Dim msg As String
For c = 1 To 3 '銘柄最終まで
msg = Cells(1, c).Value & vbCrLf
For i = 1 To 5
msg = msg & CStr(i) & "の個数:" & WorksheetFunction.CountIf(Cells(1, c).EntireColumn, "=" & CStr(i)) & vbCrLf
Next
MsgBox msg
Next
たんにCountIfしてるだけw
0471デフォルトの名無しさん
2014/08/30(土) 17:31:36.53ID:BrsM5WtF×ググるのさえ面倒
○ググっても理解できない
0472デフォルトの名無しさん
2014/08/30(土) 18:57:14.07ID:vli3pwEW0473デフォルトの名無しさん
2014/08/30(土) 18:59:43.83ID:zHnP+BODバリアントだと遅い
0474デフォルトの名無しさん
2014/08/30(土) 19:13:54.46ID:cvlIMipg暗黙の型変換が行われるから型が結構いい加減だし、遅延バインド(実行してる最中に何の型だったっけかななぁ?って考える)分だけ時間が遅くなる。
0475デフォルトの名無しさん
2014/08/30(土) 19:33:59.41ID:BrsM5WtF0476デフォルトの名無しさん
2014/08/30(土) 22:37:01.83ID:vWLdYDcCぶっちゃけここで質問されてることの9割以上はググったらわかるだろってレベルだから仕方ない。
ぐぐるのが面倒かググっても分からないバカの質問に対して、自分の知識をひけらかしたいアホが答えてるのがこーいう質問系スレの実態だろ。
0477桃白白 ◆9Jro6YFwm650
2014/08/30(土) 22:46:46.57ID:CGzN53tJWinWinの関係ですね(前向き)
0478デフォルトの名無しさん
2014/08/30(土) 23:04:18.52ID:YUBmgqqmたまにはいい事言うじゃん
0479デフォルトの名無しさん
2014/08/30(土) 23:21:04.78ID:nnVjx8jb>>474
なる程、勉強になります!
0480デフォルトの名無しさん
2014/08/31(日) 04:44:17.25ID:Tf3p4Sma作ってくれは違うくねぇ?
宿題スレがないからココに来るしかないんだろうけど
0481デフォルトの名無しさん
2014/08/31(日) 08:28:58.90ID:rhIgfBaF0482デフォルトの名無しさん
2014/08/31(日) 11:37:06.47ID:Uv1n/GEh今から出かけなきゃならないんで
0483デフォルトの名無しさん
2014/08/31(日) 19:24:18.31ID:AF7Lg2ehさらに、
Target.Address = "$IF$10" Or Target.Address = "$AG$69" Or Target.Address = "$AG$77" Or Target.Address = "$AG$85" Or Target.Address = "$AG$93" Or
Target.Address = "$AG$101" Or Target.Address = "$AG$109" Or Target.Address = "$AG$117" Or
Target.Address = "$AG$125" Or Target.Address = "$AG$133" Or Target.Address = "$AG$141" Or Target.Address = "$AG$149" Or Target.Address = "$AG$157" Or
Target.Address = "$CN$72" Or Target.Address = "$CN$80" Or Target.Address = "$CN$88" Or
Target.Address = "$CN$96" Or Target.Address = "$CN$104" Or Target.Address = "$CN$112" Or Target.Address = "$CN$120" Or Target.Address = "$CN$128" Or
Target.Address = "$CN$136" Or Target.Address = "$CN$144" Or Target.Address = "$CN$152" Or Target.Address = "$CN$160"
は、ユーザーフォーム1を呼び出すようにし、
上記以外のセルは何もしない
というようにしたいのですが、どのようなコードになるのか教えて頂けないでしょうか?
0484デフォルトの名無しさん
2014/08/31(日) 23:12:30.70ID:LiJXg7k/丸投げしたいならサンプルのブックをどっかにアップしろ
0485デフォルトの名無しさん
2014/09/01(月) 00:08:36.81ID:y5S85mVs>>311 と同じような質問で 書き方も似てるけど
同じ人?
解決しなかったの? どっかの宿題なの?
0486デフォルトの名無しさん
2014/09/01(月) 14:37:49.12ID:kGtdU4bTWebクエリのシートをアクティベイトしないで処理したいのですが、
.TextToColumnsのところでエラーが出ます。Replaceも処理されません。
Webクエリのシートを事前にアクティベイトすれば処理できます。
お知恵を拝借させていただきたいです。。
With Sheets("Webクエリ")
With Range(Cells(1,1), Cells(lastRow,1))
.Replace What:="万", Replacement:="0000"
'円でデータ区切り
.TextToColumns Destination:=Range("J1"), _
DataType:=xlDelimited, _
Other:=True, _
OtherChar:="円", _
FieldInfo:=Array(Array(1, 1), Array(2, 1), Array(3, 1)), _
TrailingMinusNumbers:=True
End With
End With
0487デフォルトの名無しさん
2014/09/01(月) 15:03:15.22ID:Ghq6ppWn似たようなのが>>335-350に有った。
With Range(Cells(1,1), Cells(lastRow,1))
を
With Range(.Cells(1,1), .Cells(lastRow,1))
にしたらどうだろう?
0488デフォルトの名無しさん
2014/09/01(月) 15:09:53.09ID:y5S85mVs全ての RangeとCellsの前に .(ドット)を付ける
0489デフォルトの名無しさん
2014/09/01(月) 17:16:20.62ID:qyPBYm3N焦る w
0490488
2014/09/01(月) 19:08:16.67ID:y5S85mVs>>488を 訂正します。
.Range("J1") は With .Range(.Cells(1,1), .Cells(lastRow,1))
に かかってしまうから ちょっとまずい
※不具合パターン
With Sheets("Webクエリ")
With .Range(.Cells(2,1), .Cells(lastRow,1))
Debug.Print .Range("J1").Address '<---これ $J$2になる
End With
End With
※外の Withを止めて下にした方がよいかも
Set Ws = Sheets("Webクエリ")
With Ws.Range(Ws.Cells(1, 1), Ws.Cells(lastRow, 1))
.Replace What:="万", Replacement:="0000"
'円でデータ区切り
.TextToColumns Destination:=Ws.Range("J1"), _
DataType:=xlDelimited, _
Other:=True, _
OtherChar:="円", _
FieldInfo:=Array(Array(1, 1), Array(2, 1), Array(3, 1)), _
TrailingMinusNumbers:=True
End With
0491デフォルトの名無しさん
2014/09/01(月) 19:46:10.68ID:fU5MWgy3プログラムは日本で、日本語PCで作成するんですが、実際に使用するのはタイって事です。
で、ポチポチと作ってたんですが、日付の扱いで詰まったので助けてください。
タイで日付はセルにdd/MM/yyyyの形式で表記するそうです。
で、そのセル(01/09/2014)と今日2014年9月1日を条件式で表そうとして、
If Date()=CDate(Cells(1,1)) Then
としたんですが、イコールになりませんでした。
01/09/2014をcdateで認識させても、2014年1月9日になっちゃいます。
どういうふに、グローバルな日付に変換すればいいでしょうか?
If Format(Date(),"dd/MM,yyyy")=CDate(Cells(1,1)) Then
で、とりあえず等式の対処は出来るんですが、
CDate(Cells(1,1))が根本的に間違ってるので、等式はよくても不等式の条件が作れません。
何かいい方法はありますでしょうか?
0492デフォルトの名無しさん
2014/09/01(月) 19:55:02.63ID:Zwwv00Rf0493デフォルトの名無しさん
2014/09/01(月) 20:13:13.60ID:A5iVvMsiセルの書式設定をしといて、セルに日付型として入れておけ
それだと If Date = Cells(1, 1) Then でいける
0494デフォルトの名無しさん
2014/09/01(月) 21:00:46.57ID:N/G4pgmfリボンに2コイチ両面、片面カラー等、印刷設定ごとの印刷ボタンを作りたいです。
0495デフォルトの名無しさん
2014/09/01(月) 21:05:06.22ID:3hW7LmGCMySQLのコネクターをインストールしていないPCでは
使うことが出来なくて困っています。
コネクターが無くても接続することができる
何か、良い方法はありませんでしょうか?
0496デフォルトの名無しさん
2014/09/01(月) 23:11:51.20ID:Qes2XjCyメーカーに問い合わせ
0497デフォルトの名無しさん
2014/09/02(火) 00:03:11.01ID:1brcQyq9上手く処理できる方法は無いでしょうか?
0498デフォルトの名無しさん
2014/09/02(火) 00:41:39.05ID:K9qSSuEhなぜそうしたいの?
0499デフォルトの名無しさん
2014/09/02(火) 00:51:42.80ID:Vtjclg5C機種選ばす、vbaから操作できるようなインターフェースってないの?
set prn = printer(0)
prn.nup(2)
prn.bothside(true)
prn.color(xlMono)
prn.exec
みたいな
0500デフォルトの名無しさん
2014/09/02(火) 00:54:38.62ID:Vtjclg5Cfor i = 0 to 100
j = i mod 3
if j=0 then j=""
で、jが12""の繰り返し
0501デフォルトの名無しさん
2014/09/02(火) 00:56:21.26ID:7BW5B5hcありがとうございます。
IEを操作してURLを指定してデータを取ろうと考えていて、サイトのページ数がURL の "" 1 2 に相当します。
0502デフォルトの名無しさん
2014/09/02(火) 01:01:57.30ID:K9qSSuEh>>500 さんのパターンで
For i = 0 To 2
If i = 0 Then
Page = ""
Else
Page = i
End If
Next
でいいんじゃね
0503デフォルトの名無しさん
2014/09/02(火) 01:14:36.19ID:7BW5B5hc>>502
教えていただきありがとうございました。
0504デフォルトの名無しさん
2014/09/02(火) 01:21:12.86ID:K9qSSuEhあと
IE操作関連の質問になると、ここでは スルーされる確立が高いから
(これに反論ある方は ここでもいいよ!って言って欲しいけど)
もし質問等あるなら
↓ ここの方が良いかも
VBAなんでも質問スレ
http://peace.2ch.net/test/read.cgi/tech/1342087380/
0505デフォルトの名無しさん
2014/09/02(火) 01:43:15.65ID:7BW5B5hcご厚意感謝します。
そちらも見てみます。
0506デフォルトの名無しさん
2014/09/02(火) 08:40:23.03ID:JmcyBuuxない。他の言語ならある?
・個々の設定でプリンタを複数登録して、プリンタを切替え
・不安定なSendKeys
0507デフォルトの名無しさん
2014/09/02(火) 18:02:21.14ID:Vtjclg5Cメーカーはxeroxなんだけど、ネットワークプリンタなんで印刷時のパケットキャプチャしたらテキストで印刷設定を指定してる部分があったので
やる気が出たら透過プロクシ的なものをローカルに立てます。
ちなみに開発用のツールは30万だった
http://www.fujixerox.co.jp/solution/dsp/product/pslad2/
0508デフォルトの名無しさん
2014/09/02(火) 20:09:05.15ID:nwLBFLFaプリンターの詳細な設定はメーカーごと、機種ごとに全部違う
どんな言語でも制御するのは大変
ネットワークのパケットだけでなく、レジストリや設定ファイルも追跡する必要がある
0509デフォルトの名無しさん
2014/09/05(金) 19:32:47.53ID:OYKZwDZqそこから階層がi (as Integer)までの深さの
すべてのファイルのファイル名を取得してセルに1つずつ表示させるようなツールを作りたいんですが
どうすればいいでしょうか?
コードをすべて書いていただけるととても助かるのですが・・・
0510デフォルトの名無しさん
2014/09/05(金) 19:35:03.36ID:OYKZwDZqコードから作成して貼り付けることには成功したのですが
その各コントロール、とくにボタン、で機能するイベントプロシージャってどこに書くんでしょうか?
ボタン押したときに何かさせたいけど
このボタンが上で書いたようコードから作成したものなので
どこにも書く場所がなくて困っています(ワラ
0511デフォルトの名無しさん
2014/09/05(金) 20:35:26.61ID:vV8bpRl/シェルオブジェクト使って
dir /b /s inputboxで取得したパス
の出力結果に対して行毎に\の数をカウントする。
\の数が、元のパスの\の数+i以下のものが目的のデータになる
0512デフォルトの名無しさん
2014/09/05(金) 22:15:48.62ID:vN4cHPD5for 10 to 1 みたいな感じです。
0513デフォルトの名無しさん
2014/09/05(金) 22:19:11.72ID:/k9uu/Tcフォームってユーザフォームの事?
その場合 一般的には イベントプロシージャは クラスモジュールに作る事になるよ
追加するコントロールが少なくてある程度固定してるなら
予め作っておいて必要に応じて .Visible を設定すれば?
0514デフォルトの名無しさん
2014/09/05(金) 22:24:22.52ID:/k9uu/Tc君の言う "スマートな方法"の定義は?
普通は
For I = 10 To 1 Step -1
とかだけど
0515デフォルトの名無しさん
2014/09/05(金) 22:28:58.50ID:vN4cHPD5ありがとうございます。
すいません。定義が曖昧でした。
より短く、シンプルなものをと考えていました。
自分の考えていたのは下みたいなものだったので、長くてスマートじゃないなと思っていました。
for i = 0 to 9
dim a as integer
a= 10 - i
0516デフォルトの名無しさん
2014/09/05(金) 22:30:55.95ID:JraYaxvT0517デフォルトの名無しさん
2014/09/05(金) 22:59:48.87ID:TJ9WELPZUnix系の find コマンドでは、
指定したフォルダ以下を再帰的に、すべてのファイルを取り出すが、
-mindepth, -maxdepth オプションで、指定した階層よりも、
上・下の階層を検索しないように設定できる
WindowsのPowerShellにも、同じ機能は無いの?
0518デフォルトの名無しさん
2014/09/05(金) 23:07:14.03ID:6e3AIwhzそういうのは、たとえソースがシンプルに書けても内部コードは複雑になる
内部コードが一番シンプルで動作も早いのはStep -1
0519デフォルトの名無しさん
2014/09/05(金) 23:41:12.22ID:rtobVFDF開始、終了が定数ならいざ知らず、変数使ってる時に勝手にそんなことされたら困るよ
0520デフォルトの名無しさん
2014/09/05(金) 23:50:09.02ID:boQby5q4そっか、インタプリタだもんな
0521デフォルトの名無しさん
2014/09/06(土) 10:53:41.48ID:Bj86ray6開始値が終了値より大きい時はループしないって性質をよく利用するので勝手に-1されるのは困る
0522デフォルトの名無しさん
2014/09/06(土) 21:32:45.33ID:cBqeYm6Yオブジェクト変数の配列を作って
その配列の要素数が多いコードを書くと
動作がものすごく重くなるんだけど
これを防ぐにはどういうテクニックを使えばいいですか?
0523桃白白 ◆9Jro6YFwm650
2014/09/06(土) 21:36:02.45ID:PaDmYBUZ要素数が多い配列を返す関数を書いてたり
要素数が多い配列を引数に取る関数を書いておらっしゃるのでしょうか?
0524デフォルトの名無しさん
2014/09/06(土) 21:46:33.96ID:bJjx4RgG遅くなってる理由がイマイチ分からないからアレだけど、
例えば配列を最初から10万要素持っててループしているとか、
または都度配列の要素数を変えてるために時間を食ってるとかなら、
配列の代わりにコレクションを使うとかどうでしょうか?
0525デフォルトの名無しさん
2014/09/06(土) 21:49:43.15ID:Bj86ray6型に関係なく、変数(要素数)が多いというのはメモリをたくさん消費するということで、それだけじゃ動作が重くなったりはしない
何か根本的に勘違いしてるので、対策は「VBAの勉強をきちんとする」
0526デフォルトの名無しさん
2014/09/07(日) 07:14:16.18ID:8bYOV7ym>>>522
>型に関係なく、変数(要素数)が多いというのはメモリをたくさん消費するということで、それだけじゃ動作が重くなったりはしない
動作って言うなら場合によっては重くなると思うよ。メモリそれだけ食ってるわけだから
例えば計算に使うのに十分なメモリ領域がそれによって確保出来なければ当然動作は重くなる。
>>525
>何か根本的に勘違いしてるので、対策は「VBAの勉強をきちんとする」
VBAスレなんだからVBAの勉強をすると言うのは全てに対して当てはまる。つまり、回答になっていないっていうことだよ。
それに、メモリの話はVBAに限ったことじゃなくてもっとPCの根本的なところな話だしね。
0527デフォルトの名無しさん
2014/09/07(日) 08:35:27.97ID:P+sGFsS3いや、メモリ確保出来なければ失敗するだろ
0528デフォルトの名無しさん
2014/09/07(日) 10:32:33.60ID:tnqniVGkメモリを大量に食って遅くなるのは、ようするにスワップのこととか考えてるんだと思うけど、
VBAはスワップが発生するほど変数領域をたくさん取れない仕様になってる
スワップ意外で変数を大量確保しただけで遅くなる要因てほかに何がある?
キャッシュのミスヒットぐらいではそこまで遅くはならんよ
ループの回数とか計算量が増えて遅くなるのは当たり前だし、そのオーダーはどっちかと言うとアルゴリズムの問題
0529デフォルトの名無しさん
2014/09/07(日) 13:46:18.16ID:wYoKfG3n> VBAはスワップが発生するほど変数領域をたくさん取れない仕様になってる
これ本当かよ?
すでにスワップしてる状態でマクロ動かしたらいきなり実行時エラーとか出るの?
0530デフォルトの名無しさん
2014/09/07(日) 14:04:03.12ID:P1+dMMwW入力に対応して随時、補完候補が表示されるようにできないのでしょうか?
Excel2010、win7
0531デフォルトの名無しさん
2014/09/07(日) 14:20:07.58ID:P+sGFsS3スワップしてるかじゃなくて「スワップする程」な
1GBちょいあたりが上限な印象
0532デフォルトの名無しさん
2014/09/07(日) 19:33:07.88ID:u52+473R0533デフォルトの名無しさん
2014/09/07(日) 23:04:28.82ID:oroYJ4ZW48:10 ←48時間10分みたいな、、
0534デフォルトの名無しさん
2014/09/07(日) 23:14:58.30ID:Zs53uBvG出力先のセルの書式設定を変えれば、ただの足し算でできると思う。
0535533
2014/09/07(日) 23:23:34.54ID:oroYJ4ZW事故解決。。
http://support.microsoft.com/kb/879837/ja
[ユーザー定義] を選択し
[種類] ボックスに 「[h]: mm」(「」 は除く) と入力し、[OK] をクリックします。
これはしらなかった・・
休憩時間の抽出ってどうしたらいいですか?
現状ではvbaで [残業終了時刻] - [残業開始時刻] で経過時間までは出るけど、
そこから 時刻が17時25分以降に8時間以上残業したら、休憩で1時間マイナスさせたいんです。
問題は [残業終了時刻] 、 [残業開始時刻] に日付を含めたシリアル値で入力している為、時刻のみの抽出の仕方がわからない事です。
よろしくお願いいします。
0537デフォルトの名無しさん
2014/09/08(月) 10:01:10.21ID:K+WRRTl3整数部分が日付で小数部分が時刻です
0538デフォルトの名無しさん
2014/09/08(月) 10:30:23.00ID:Alxd9Z9ZとりあえずInt使って整数部分引いてみます
0540デフォルトの名無しさん
2014/09/08(月) 11:42:44.18ID:2Wlnx/FyWorkbooks.Add
ActiveWorkbook.SaveAs Filename:=fname
fnameにはパス及び拡張子まで含めたファイル名を指定
0541デフォルトの名無しさん
2014/09/08(月) 14:38:16.26ID:Alxd9Z9Zファイルは保存したくないんだよ。
終了時に消すのもダメ?
0543デフォルトの名無しさん
2014/09/08(月) 15:43:57.84ID:Qf62wDAL配列の要素の数によると思うけど、
セルの文字色、背景色、罫線とかコード内で触ってない?
セルのプロパティをコード内で触ると、途端に速度落ちるよ
0544デフォルトの名無しさん
2014/09/08(月) 15:46:39.54ID:UKi6zLkX保存しないなら名前要らなくない?
マクロ内で扱うならWorkbook型変数にいれて扱えるし。
Dim wb As Workbook (As Object とか As Variant でも良いけど)
Set wb = Workbooks.Add
以降wbに対して操作する
0545デフォルトの名無しさん
2014/09/08(月) 20:11:41.14ID:qBk57sir新規じゃなくなるけどxlt開けばそんな感じになる
とおもう
0546541
2014/09/11(木) 02:09:49.83ID:C7bTWK0wダメなのじゃ。
>>544
いるのじゃ。
マクロは自分用じゃなくて複数のユーザさんに使っていただいているんです。
普通に開くと「Book2」みたいな味気ない名前で開くので
もっとユーザさんにわかりやすい「Book2」じゃなくて「○○の分析データ」みたいなブック名にしたくて。
それを保存するかどうかはユーザさん次第です。
保存していただく場合は「○○の分析データ」みたいに名前が入ってたらより便利でしょうし。
0547デフォルトの名無しさん
2014/09/11(木) 02:41:53.14ID:QjgECpzaえっと タイトルバーの表記上でもいいのかな?
君のやりたい事全部 解決してないとは思うが 一つの案として
Excel総合相談所 114
http://peace.2ch.net/test/read.cgi/bsoft/1404485911/115-
からある質問の流れの中に
>aaa.xlsというファイルを ActiveWindow.Captionでタイトルバーの表記を bbb.xls に変更したけど
>閉じるときに aaa.xls への変更を〜 と表示されたので
>ここを bbb.xls への変更を〜 にしたかったです
ってのがあるんだが
.Captionでタイトルバーの表記を "○○の分析データ" みたいに
変更するのは どうなのかな?
0548デフォルトの名無しさん
2014/09/11(木) 06:49:36.60ID:/l9NbsTz0549デフォルトの名無しさん
2014/09/11(木) 12:40:04.23ID:C7bTWK0wそしてフォルダの階層の深さの数値もあります(Integer)。
このとき、そのフォルダよりその深さ以内のすべてのaviファイルの名前を取得するには
どういうコードを書けばいいでしょうか?
0550デフォルトの名無しさん
2014/09/11(木) 12:40:33.86ID:C7bTWK0wなるほどそんな方法がありましたか!
ありがとうございました。
0551デフォルトの名無しさん
2014/09/11(木) 14:02:00.96ID:QjgECpza>>509さんかな?
自分は丸投げ嫌いだから
どこまで作れているの?
全く作ろうとしてなくて 丸投げなら
俺は ここでまでで後はスルーする
でも一応 ヒントを
ファイルとかフォルダ処理は"FileSystemObject"を使えばいい
「Microsoft Scripting Runtime」に参照設定をして
Dim FSO As New FileSystemObject
とかするのね
がんばってみてね(^^v
0552デフォルトの名無しさん
2014/09/11(木) 15:56:06.94ID:nzZ17j8H>>511でやり方書いてやったのに。
Sub macro1()
depth = 2
search_path = InputBox("検索するパスを入力")
search_path_depth = Len(search_path) - Len(Replace(search_path, "\", ""))
depth = depth + search_path_depth
Set objShell = CreateObject("WScript.Shell")
Set retExec = objShell.Exec("%ComSpec% /c dir /b /A-D /S """ & search_path & """")
Do While retExec.Status = 0
DoEvents
Loop
files_all = Split(retExec.StdOut.ReadAll, vbCrLf)
i = 0
For j = 0 To UBound(files_all)
If Len(files_all(j)) - Len(Replace(files_all(j), "\", "")) <= depth And Right(LCase(files_all(j)), 4) = ".avi" Then
ReDim Preserve files(i)
files(i) = files_all(j)
i = i + 1
End If
Next
For i = 0 To UBound(files)
ThisWorkbook.Worksheets("Sheet1").Cells(i + 1, 1) = files(i)
Next
End Sub
0553デフォルトの名無しさん
2014/09/11(木) 16:05:35.71ID:LHGJhOfgxltスルーすんな
0554デフォルトの名無しさん
2014/09/11(木) 17:30:04.86ID:j7cQOneDある日突然マクロ名が変更(欠落?)されて実行不可になってしまいます。
例:マクロ名ABCDEF ⇒ マクロ名ABCD
何か考えられる原因を教えて頂けると助かります。
0555デフォルトの名無しさん
2014/09/11(木) 17:36:27.06ID:FXbvu4fI誰か違うやつが触ってる可能性は?
0556デフォルトの名無しさん
2014/09/11(木) 18:18:26.71ID:A8Og/307マクロが記述されたブックの名前?
実行したいプロシージャの名前?
0557553
2014/09/12(金) 08:44:04.24ID:f7PMt4Kvシートを開いた時点で実行するVBにシートの自動計算をストップさせる記述をし、シート上にあるボタンにマクロを割り付けて再計算するようにしてあります。
Sub シート更新()
ActiveSheet.Calculate
Sleep (100)
MsgBox "データを更新しました。", vbInformation
End Sub
この「シート更新」が「シート更」に書き換わっていたりするのです。
0558デフォルトの名無しさん
2014/09/12(金) 09:05:03.52ID:roETZAvI>>553は俺だし
聞いたことないからブック作り直し程度しか思いつかない
0559デフォルトの名無しさん
2014/09/12(金) 09:27:39.23ID:tVj/zCnQかならず毎回なるの?
ならないなら、人為的だととおもうけど。
0560デフォルトの名無しさん
2014/09/12(金) 10:18:36.34ID:4XODk0h/VBっていうかExcelVBAですよね?
別口でVBのプログラムも動かしてるわけではないですよね?
いっそ短い名前のままで使ってみたらどうですか?
たとえば
Sub A()
とか
そしたらそれ以上短く出来ないから動きそうですけど。
0561554
2014/09/12(金) 10:37:40.90ID:f7PMt4Kv失礼しました。
>>559
毎回はならずに数日たつと書き換わっています。
>>560
ExcelVBAです。
そうですね、1文字の名前にリネームして運用してみます。
0562デフォルトの名無しさん
2014/09/12(金) 12:39:03.62ID:r8qrtjiwオレ作りたいものは決まってるから、基本の条文をある程度理解して
ネットに上がっているコードを繋ぎ合せながらやってもセル範囲など細かいところでエラーがでてしまう。
エラー出るたびまた色々なサイトで調べながらちょこちょこ進めてるけど効率悪いような気がする。
効率のいい学び方あったら教えて下さい
0563デフォルトの名無しさん
2014/09/12(金) 13:10:55.48ID:Gwix+uQ+Number As Integer
Name As String
Age As Integer
End Type
で構造体みたいなものを作って
Dim P() As Person
みたいに人データを配列で管理してるコードをすでに作っています。
これをNameで昇順に並べて、その「あいうえお」順でNumberを1,2、3・・・・・と割り当てるにはどうすればいいでしょうか?
いまのところP()の全データを仮シートに書き出し
Excelの機能のSortを使って並べなおし
それをわざわざP()に代入しなおすというダサい方法しか思いつきません。
0564デフォルトの名無しさん
2014/09/12(金) 13:53:37.12ID:gVsovmQ9それが一番効率が良い
聞いたり見たことが全て自分の物に出来る天才なら別だけど
0565デフォルトの名無しさん
2014/09/12(金) 14:06:00.99ID:r8qrtjiwありがとうございます。地道にやっていきます。
0566デフォルトの名無しさん
2014/09/12(金) 15:02:23.53ID:4XODk0h/その構造体の元のデータソースはどっかにあるんでしょ?
普段はそれ自体をファイルで保持・管理しておいて、
削除や追加で変更が生じたときには随時更新する。
つまり、普段からソート済みの状態でデータソースを持っておいて
何かの処理に使いたいときだけ構造体に入れて使えば良いだけでは?
0567デフォルトの名無しさん
2014/09/12(金) 16:13:09.39ID:ALozTPWZ大体同じだよ。w
俺も自分の趣味と勉強を兼ねて同じプログラムをアップデートし続けている
ただ、近くに図書館があるからそこで色んな本を借りて基本的なところ&自分の興味のあるところw
を見て勉強している
さすがにネットだけってのは情報が断片的に過ぎるんじゃないかなと思うけど
0568デフォルトの名無しさん
2014/09/12(金) 21:50:31.61ID:besSWj6W0569デフォルトの名無しさん
2014/09/12(金) 21:51:29.16ID:besSWj6W0570デフォルトの名無しさん
2014/09/12(金) 23:40:31.94ID:9TpkqwiT> ダサい方法しか思いつきません。
Excel だとそれが楽チンだから、性能とか特に困ってないなら、それでもいいと思うけど
それが嫌なら、VBA には標準ではソート機能はないから自分でゴリゴリ実装するしかない
0571デフォルトの名無しさん
2014/09/13(土) 02:39:04.25ID:yM9N/fr8この手のレスを見る度に早く.Net化してくれないかなっていつも思う。
0572デフォルトの名無しさん
2014/09/13(土) 04:08:15.45ID:aRKTTaf3単なるデータベース管理だろ?Access使え
0573デフォルトの名無しさん
2014/09/13(土) 04:44:24.17ID:HC2m1B2Vちょっと気になったのが
その構造体のNameに入るの 漢字名? ふりがな?
漢字名だと シートへ転記してソートしようが
漢字コード順にしかならん気がするが・・・・・
0574デフォルトの名無しさん
2014/09/13(土) 18:02:06.00ID:C+4DW6lrそれの定数変数(vbRed)みたいなのってどうやって調べますか?
現状、その色を仮に使ってイミディエット窓で「? Activecell.Font.Color」で
でてきた192168みたいな数字をコードに書くというダサい方法を使ってる。
0575デフォルトの名無しさん
2014/09/13(土) 18:52:32.01ID:mA7pGFLx0576デフォルトの名無しさん
2014/09/13(土) 23:11:38.58ID:aRKTTaf3ネットで検索
ただし一致する定数があるとは限らない
0577デフォルトの名無しさん
2014/09/14(日) 22:20:25.09ID:2S7Vs/321つ目のコード(頂物)はシートモジュール(sheet1)でかかれたものでwebサイトから取得したデータを新規にシート作成・貼付けを行うものです。
2つ目のコードは標準モジュールでかいたものでシートモジュールを実行してできた新規のシート(sheet2)に計算式などを加えるものです。
シートモジュール実行後に自作の標準モジュールを実行しようとしたところsheet2をマウスクリックで選択してからでないと定義エラーがでて出来ませんでした。
そこでsheet2を選択するコードを標準モジュールに加えましたがそれでもダメでした。1つ目のコードを標準モジュールにコピーしてもダメでした。
どうすればいいでしょうか。初心者ですのでどの分野を学習すればいいかだけでも教えて頂ければ。願いします。win8、エクセル2010です。
0578デフォルトの名無しさん
2014/09/14(日) 22:38:55.80ID:7t/oowuMとりあえずコード晒した方がみんな分かるんじゃない?
0579デフォルトの名無しさん
2014/09/15(月) 07:18:25.95ID:CzZ99oZnSheet2を選択しとけばエラーが出ないのなら、とりあえず自作コードの適当な場所に、
(具体的にどこが適当かはコードを見ないと判断出来ないけど、少なくともエラーが出る箇所より前)
Worksheets("Sheet2").Select
の一文を入れとけば良いんじゃないですか?
もちろん、今後のメンテナンスや機能拡張のことも考えれば、
現在シートモジュールにあるコードも出来る限り標準モジュールに
置き換えておいたほうが良いです。
何かイベントプロシージャを使っているのでない限り、
シートモジュールにコードを書くメリットは特にないと思います。
0580577
2014/09/15(月) 10:12:38.38ID:eoqWNWRhWorksheets("Sheet2").Selectを入れても駄目だったんですよ。
説明不足でもうしわけありません。イベントプロシージャを使ってます。
モジュールの切り替えができてないからなのかなと思ったんですが。
0581デフォルトの名無しさん
2014/09/15(月) 10:42:44.84ID:WMlWVjO/最初に全部出せよ、クソヤロウ
0582579
2014/09/15(月) 13:06:14.89ID:CzZ99oZn手動でシート2を選択すれば動くのに、
それとほぼ同等の動作であるコードでは何故ダメなのかとても不思議ですが、
判断するための手がかりが不足していますので
やはりコードを晒していただくのが一番早道のようです。
0583デフォルトの名無しさん
2014/09/15(月) 13:34:01.35ID:PJO6a40Eそのくらいの可能性、見て取れよ。
勝手に思い込んで勝手にブチ切れてりゃ世話ねーよ。
0584577
2014/09/15(月) 15:39:36.75ID:eoqWNWRhありがとうございます。
通常では考えられない不具合ということだけ十分認識して
もう一度自分で検討したいと思います。
0585デフォルトの名無しさん
2014/09/15(月) 15:45:38.70ID:CzZ99oZnそこまで大げさな話ではないです。
多分コードをみればすぐ分かるような間違いだと思いますが、
コードを見ていないので分からないだけです。
0586デフォルトの名無しさん
2014/09/15(月) 16:56:46.03ID:jaJ///zd最低限、エラーが出た行と、出たエラーメッセージを正確に書け
>>581
>そこでsheet2を選択するコードを標準モジュールに加えましたがそれでもダメでした
とは初めから書いてあるがな
0587デフォルトの名無しさん
2014/09/15(月) 21:05:00.78ID:LjdFnH0A>>そこでsheet2を選択するコードを標準モジュールに加えましたがそれでもダメでした
>とは初めから書いてあるがな
コードで書いて無いから本当に有効なコードだったかは判断出来ない
0588デフォルトの名無しさん
2014/09/15(月) 21:23:14.17ID:ymf8aUd8コードで書いたとしても本当に有効なコードだったかは判断出来ない
あほくさ
0589デフォルトの名無しさん
2014/09/16(火) 05:48:11.89ID:Ag5d7ZlFそれでダメなら何の命令で止まるのか、その部分だけでも書かないと。
エスパーはいないよ。
あと標準モジュールとかシートモジュールなんとかはほぼ関係ないと思う。
一行ずつデバッグしながらどこでセレクトしたのが外れてしまってるか確認しようよ。
0590デフォルトの名無しさん
2014/09/16(火) 06:24:08.44ID:EiHHMuT4>Worksheets("Sheet2").Selectを入れても駄目だったんですよ。
Worksheets("Sheet2").Selectを、Worksheets("Sheet2").Activateにすると動くと勝手にエスパー。
0591デフォルトの名無しさん
2014/09/16(火) 14:34:15.42ID:9xrF7FgD開こうとすると毎回
「この名前はすでにあるモジュール、プロジェクト、オブジェクトライブラリで使われています」
というメッセージが出ます。
その場では自動でxlaファイルが開いて関数を呼び出せるようになるのですが、
一度エクセルを閉じてしまうと同じ操作をやり直さなくてはなりません。
読み込んだxlaを記憶しておいて自動で開くことはできないのでしょうか。
0592デフォルトの名無しさん
2014/09/16(火) 18:44:07.69ID:VmQD7VKvちょっと状況が掴めないけど
>開こうとすると毎回
>「この名前はすでにあるモジュール、プロジェクト、オブジェクトライブラリで使われています」
これ .xla ファイルを参照設定して(開こうと)してない?
もしそうなら
.xla の"プロジェクト名"を変更すると解決するかも
違うなら自分にはわからないな
0593デフォルトの名無しさん
2014/09/16(火) 20:05:05.05ID:9xrF7FgD原因は違いましたが、参照設定で開くというヒントで調べて、解決しました。
・xlaとして保存せず、名前を変えただけだった。
・アドインとして参照していなかった。
が原因でした。
ありがとうございました。
0594デフォルトの名無しさん
2014/09/17(水) 12:37:30.23ID:dZ1fhYBv各シートを選択したときにアクティブになっているセルのアドレスはみんなシートによってバラバラなのはみなさんご存知のとおりだと存じます。
この各シートに記憶されているアクティブになる予定のセルのアドレスはどうやって取得しますか?
コードには各シートをアクティブにしてアクティブセルを調べる方法は禁止とします。
0595デフォルトの名無しさん
2014/09/17(水) 12:44:39.42ID:P16JoJkh0596デフォルトの名無しさん
2014/09/17(水) 12:48:04.24ID:EnwZXKAD変数名のタイプミスを検知しませんでした。
変数名が間違っていた場合エラーで実行出来なくなると思っていたのですが、
このオプションには何か条件があるのでしょうか。
変数はBoolean型、バージョンは2013です。
0597デフォルトの名無しさん
2014/09/17(水) 14:12:36.71ID:Pa92VYa5予約後と被ってた
どこかでグローバル宣言していた
関数の引数として定義していた
同じ名前の関数を作ってた
同じ変数名を2回使ってた
0598デフォルトの名無しさん
2014/09/17(水) 14:16:56.53ID:Pa92VYa5質問スレでクイズは却下
0599デフォルトの名無しさん
2014/09/17(水) 14:27:19.63ID:dZ1fhYBv[X][X][X]
0600デフォルトの名無しさん
2014/09/17(水) 14:28:16.96ID:c1ogrgKw多分ファイルのどこかに書いてあるから、ファイル解析して頑張れ、応援してるぞ
http://msdn.microsoft.com/en-us/library/office/cc313105(v=office.12).aspx
0601デフォルトの名無しさん
2014/09/17(水) 16:14:50.86ID:Zaxh9vZlあの田中さんでさえ各シートをアクティブにして調べてる
http://officetanaka.net/excel/vba/tips/tips34.htm
どうしてもセレクトやアクティベートをしてはいけないという
具体的理由があるならそれを教えて欲しい。
俺には単なる知的好奇心以外の理由が思いつかないし、
もしそれが理由ならこれ以上相手をする気にはなれない。
0602デフォルトの名無しさん
2014/09/17(水) 18:38:54.58ID:EnwZXKADありがとうございます。
ただ、ミスした変数名で検索をかけても
該当の1箇所しかHitしなかったので
一応どの条件もクリアしているかな、とは思います。
0603デフォルトの名無しさん
2014/09/17(水) 18:58:08.29ID:Zaxh9vZlとりあえずコード見せてくれたらなんか分かるかもしれない。
0604デフォルトの名無しさん
2014/09/17(水) 19:25:00.80ID:pzZaxrRp変数名は?
昔 Log だかのありがちな名前ではまったことがあったような気がする。
0605デフォルトの名無しさん
2014/09/17(水) 20:15:31.24ID:IUDVFBKE0606デフォルトの名無しさん
2014/09/17(水) 20:17:03.92ID:dZ1fhYBv理由は、以前オレがアクティベートしなくても取得する方法を発見したからだよ。
そのときはその方法に興奮し感動したもんだよ。
しかし、やりかた忘れた。
0607デフォルトの名無しさん
2014/09/17(水) 20:18:19.60ID:EnwZXKAD「flg_**** 」です。
宣言した変数名がflg_aa11で、ミスしてたのはflg_zz11みたいな感じで
アルファベットの2文字を間違えてました
>>603
職場のデータなのでちょっと今手元にないのですが、
Dim flg_aa11 as Boolean
If 条件 Then
flg_aa11 = True
End if
〜中略〜
If flg_zz11 = True Then ←ここを間違えていた
処理
End if
という感じです。
1stepずつ確認した時flg_zz11の中身はEmptyで、
Ifの中に書いた処理が実行されてしまっていました。
0608デフォルトの名無しさん
2014/09/17(水) 20:27:26.73ID:E0verSM2If flg_zz11 = False Then 〜、ですね
0609デフォルトの名無しさん
2014/09/17(水) 20:27:42.28ID:/OmvXPMuOption Explicit を邪魔でコメントにしてたってオチじゃないの?
0610デフォルトの名無しさん
2014/09/17(水) 20:53:46.21ID:Zaxh9vZlそれ勘違いとか夢オチとかではないよね?
忘れたって言ったってまるっきり何もかも覚えてないってわけでもないでしょ?
何かのプロパティとして取得できたのか、
数行でも何らかのプログラムをして取得できたのかぐらいは覚えてないの?
0611デフォルトの名無しさん
2014/09/17(水) 22:03:50.72ID:pzZaxrRp現象が再現する最小のコードをどこかにアップしてみて
多分その過程で原因がわかると思うけど
0612デフォルトの名無しさん
2014/09/17(水) 22:14:18.35ID:40gxadfd・別の(たとえばシート)モジュールだった
・Module2だった
0613デフォルトの名無しさん
2014/09/17(水) 22:25:27.09ID:q0kO1DWi0614デフォルトの名無しさん
2014/09/17(水) 22:37:02.98ID:IUDVFBKE0615デフォルトの名無しさん
2014/09/17(水) 23:47:56.45ID:E0verSM2明日もう一度ご指摘いただいた点を見直してみて、
それでも再現するようであればまたご相談させていただきます。
0616デフォルトの名無しさん
2014/09/18(木) 01:31:16.98ID:RJkooT4yブック丸ごと公開してデバッグでもしない限り
0617デフォルトの名無しさん
2014/09/18(木) 10:33:08.86ID:NRNOSfJW分からない。
当時発見したときは、「ほうほう、こんな方法があったのか!」とものすごく感動した思いがあるので
やりかたが存在するのは確か。
オレはネット検索したりオブジェクトブラウザを見たりVBA本を数冊読んだりすることくらいしかしないから
そのうちのどれかから見つけたのだと思うけど、いまだにどうやって見つけたかはさっぱりわからない。
もちろん夢とかじゃないだろう。
0618デフォルトの名無しさん
2014/09/18(木) 11:29:45.86ID:rKSmT1lK0619デフォルトの名無しさん
2014/09/18(木) 11:49:38.12ID:NRNOSfJWたしかWindowという文字列を使った覚えがある。
それかもしれない。
ところで、そのアクティプじゃないWindow(ブック?)の アクティプセル取得ってどうやるんだ?
0620デフォルトの名無しさん
2014/09/18(木) 11:51:42.27ID:rKSmT1lK0621デフォルトの名無しさん
2014/09/18(木) 11:54:24.19ID:NRNOSfJWそれだ!
0622デフォルトの名無しさん
2014/09/18(木) 11:57:45.15ID:rKSmT1lK>各シートに記憶されているアクティブになる予定のセルのアドレス
じゃないし
0623デフォルトの名無しさん
2014/09/18(木) 12:03:23.15ID:NRNOSfJWつまり
Workbooks.Count = Windows.Count
の関係にある。
しかし例えばCount=5のとき
Workbooks(1)=Windows(5)
Workbooks(2)=Windows(4)
Workbooks(3)=Windows(3)
Workbooks(4)=Windows(2)
Workbooks(5)=Windows(1)
という不思議な関係がある。
Windowsってなにものなんだ?
存在意義は?
とりあえずこれですべてのBookの各ActiveSheetとActivecellのオブジェクトを、それをいちいちActivateせずに取得できるようになった。
Windows(n)にはActivesheetのプロパティもActiveCellのプロパティも存在するから。
BookについてはWindows(n).Parentで取得できるし。
0624デフォルトの名無しさん
2014/09/18(木) 12:09:23.49ID:NRNOSfJWブックをたくさん開いて、いろんなシートでいろんなセルをActivateにしたあと、
次のコードを実行してごらん。
Sub ActiveObjectCheck()
Dim w As Window
Dim i As Integer
i = 1
Cells(1, 1) = "Book"
Cells(1, 2) = "ActiveSheet"
Cells(1, 3) = "ActiveCell"
Range(Cells(1, 1), Cells(1, 3)).Interior.Color = rgbGray
For Each w In Windows
i = i + 1
Cells(i, 1) = w.Parent.Name
Cells(i, 2) = w.ActiveSheet.Name
Cells(i, 3) = w.ActiveCell.Address(False, False)
Next w
End Sub
0625デフォルトの名無しさん
2014/09/18(木) 12:11:19.04ID:rKSmT1lKあるのは
>作業中のウィンドウは常に Windows(1) であることに注意してください。
http://msdn.microsoft.com/ja-jp/library/microsoft.office.interop.excel.windows(v=office.11).aspx
0626デフォルトの名無しさん
2014/09/18(木) 12:14:28.95ID:rKSmT1lK>ブックをたくさん開いて、いろんなシートでいろんなセルをActivateにしたあと、
>>594 コードには各シートをアクティブにしてアクティブセルを調べる方法は禁止とします。
の条件だろ
0627デフォルトの名無しさん
2014/09/18(木) 12:28:02.12ID:Y/CO+rMOWorkbooks.Count = Windows.Count ではなくなる。
0628デフォルトの名無しさん
2014/09/18(木) 13:58:03.46ID:mK8SZ9df例えば、ひとつのブック内でSheet1がアクティブシートのとき、
Sheet2やSheet3をアクティブにしたときのアクティブセルを
セレクトもアクティベートも求めるにはどうすれば良い?
>>594で出された最初の質問にはそういう意味も含まれているよ。
0629デフォルトの名無しさん
2014/09/18(木) 14:09:26.09ID:RX7vjZRI0630628
2014/09/18(木) 14:11:33.52ID:mK8SZ9df×セレクトもアクティベートも求めるにはどうすれば良い?
○セレクトもアクティベートも使わずに求めるにはどうすれば良い?
0631デフォルトの名無しさん
2014/09/18(木) 15:55:49.61ID:RJkooT4y今のExcelファイルは単なるテキストだし
ていうか、普通にシートやブック切り替えて調べりゃいいじゃん
なんで一番簡単な方法を拒絶するのか理解できん
単に頭の体操がしたいだけ?
非公開の方法を見つけたところで互換性が保証されてるわけでもないのに
0632デフォルトの名無しさん
2014/09/18(木) 17:53:03.79ID:yoMUPDG3に決まってら w
よくみんな付き合い続けるね
0633デフォルトの名無しさん
2014/09/18(木) 18:08:34.35ID:mK8SZ9dfSTAP細胞みたいなもんだよ。
みんな無いと思ってるけど
一人でも有ると言い張る奴がいる以上
白黒つけたくなるんだよ。
0634デフォルトの名無しさん
2014/09/20(土) 23:15:25.62ID:A1CJttDbSUMでもMATCHでもMAXでもなんでもいいんだけど
フィルターを使ってるときSelectionの範囲内の見えてるセルだけを対象としたいときは
どうすればいいですか?
0635デフォルトの名無しさん
2014/09/21(日) 02:13:03.35ID:zM26SjLWSpecialCells(xlCellTypeVisible)
でググると色々なサイトで解説されてる
0636デフォルトの名無しさん
2014/09/21(日) 05:53:16.13ID:KHLm9j0T0637桃白白 ◆9Jro6YFwm650
2014/09/21(日) 17:21:56.19ID:yQ4xgCu9できたおー
https://friendpaste.com/2EtCwSYrRIOkSj0z6FeZjs
: ____
,. -'"´ `¨ー 、
/ i i /ヽ、
,,.-'" \ / ヽ
/ / /::::::\\ ー―= く __ ヽ、
/ | |:::::::::::::::| | | |:::::::::::::::| | ヽ
./ \ \:::::// \\:::::/ / ヽ
/ \ i
/ ( .l
,' 、__ /
i / /))
',  ̄ / / ((
ヽ、 __,,.. --------------i-'" / ))
ヽ、_ __ -_'"--''"ニニニニニニニニヽ≦__∠〜
`¨i三彡--''"´ ヽ
/ ヽ
/ ヽ
0638デフォルトの名無しさん
2014/09/21(日) 20:07:04.65ID:voPYEv14フォームを使っててボタンを押したら標準モジュールのプロシージャを実行するような仕様のときは
どうすればいいんですか?
ボタンクリックのイベントプロシージャのところでF8押しても
標準モジュールのプロシージャからF8押しても
うまくいかない。
0639デフォルトの名無しさん
2014/09/21(日) 20:23:08.62ID:f5g4XcaGStop
0640デフォルトの名無しさん
2014/09/21(日) 20:24:23.12ID:H/qewALrブレークポイントつこてもあかんの?
0641デフォルトの名無しさん
2014/09/21(日) 20:32:59.99ID:voPYEv14つこてる豆が違うんですよ。
0642デフォルトの名無しさん
2014/09/21(日) 20:40:13.66ID:voPYEv14フォームのボタンから実行したときにプロシージャに飛ばされた先のところでいったん止まり
そこからF8連打で一行ずつ実行されるということですか?
ちょっといまテストできない環境なので後で試してみます。
0643デフォルトの名無しさん
2014/09/21(日) 20:42:26.38ID:voPYEv14VBAのWorksheetfunctionを使ってMATCHを使っているのですが
これ該当値がないとシート関数とは違ってエラーでマクロ自体がそこで中断して
止まってしまいます。
エラーになりそうなときはMATCHを使わないように回避するにはどうするのが一般的でしょう?
基本的な質問かもしれませんが。
0644デフォルトの名無しさん
2014/09/21(日) 21:57:32.99ID:zM26SjLWエラーになるかどうかを事前に知ることは一般的には不可能なので、
(検索対象のデータ数がゼロ件であるとかの特殊な場合を除く)
エラーが出たらそれを無視したりエラートラップをかけて処理を行ったりします。
この辺が参考になるかと思います。
http://www.moug.net/tech/exvba/0100004.html
0645デフォルトの名無しさん
2014/09/21(日) 22:07:46.66ID:voPYEv14ただそれをどういうふうにコードに書くのか。
0646デフォルトの名無しさん
2014/09/21(日) 22:10:35.55ID:voPYEv14だってそれを使ったら他の場所で他のエラーが出ても無視しちゃうのは
これからコードを更新するときなどにも支障が出ますし。
エラーは人間でいえば痛みです。
痛みがあるおかげで病院に行ってガン末期になる以前に治療が開始できるのです。
0647デフォルトの名無しさん
2014/09/21(日) 22:42:41.62ID:zM26SjLW事前に予測できるのですか?
貴方の最初の質問からではちょっとその状況が想像出来ませんが、
それならばMatchを実行するかどうかをIf文で分岐させれば良いだけではないのですか?
その分岐条件がどんなものかも貴方の質問内容から汲み取ることは出来ませんので
私にはこれ以上の回答は出来ませんが。
それに貴方の哲学とやらにも興味はないので、それを抜きにすれば
On Error が一般的な解決方法であるのは間違いないです。
ちなみにOn Error Goto 0 でエラートラップを解除できますから
当該処理の範囲を抜ける際にその一文を書き加えるだけで
貴方が懸念するような事態にはなりません。
0648デフォルトの名無しさん
2014/09/22(月) 21:44:59.26ID:MSAqdUgShttp://www.moug.net/tech/exvba/0100035.html
一方、WorksheetFunctionオブジェクトを省略した記述ではエラー値が返され
実行時エラーは発生しません。検索値がないときは
IsError関数やIsNumeric関数などを使ってエラーを判定する処理を記述してください。
だってよ
それ以前にVBAで Match 使う場面が思いつかんかった
xlpart の find でよくね?
0649デフォルトの名無しさん
2014/09/23(火) 03:48:11.14ID:Nn4DQhnVすばらしい!
しかしなぜMATCH関数には
Application.WorksheetFunction.Match(・・・
Application.Match(・・・・・
の2とおりもあるんだ?
他の関数も2とおりあるものはたくさんあるのかな。
ちなみに後者はなんのオブジェクト?
0650デフォルトの名無しさん
2014/09/23(火) 04:37:16.63ID:DADtgFDkそのリンク先のサイトに、互換性を保つためってちゃんと書いてあるんだが
0651デフォルトの名無しさん
2014/09/23(火) 05:45:20.81ID:Nn4DQhnVでは、
Application.Match(・・・・・
は、好ましくない書き方なんですね?
ずばりそうでしょう。
実際、オブジェクトブラウザにはこの書き方は出ていない。
0652デフォルトの名無しさん
2014/09/23(火) 14:02:12.13ID:rjUTyIhL逆に
WorksheetFunction.Match メソッド (Excel)
http://msdn.microsoft.com/ja-jp/library/office/ff835873(v=office.15).aspx
ここのサンプルに
var = Application.Match(Cells(iRow, 1).Value, Worksheets(iSheet).Columns(1), 0)
とか 使ってたりするwww
0653デフォルトの名無しさん
2014/09/23(火) 18:01:37.61ID:J4bO4OTwどんな使い方したいかによるなぁ。
イベント絡みで使いたいの?
それともメソッドを変数に格納して使いたいとか?
0654デフォルトの名無しさん
2014/09/23(火) 18:21:04.36ID:BgveuF20【Excel Ver】Excel 2003
【OS】Windows XP Home
【詳細】
'従業員のスケジュール記入列を読み出す変数
Dim i
'従業員ワークシートの開始・終了時間の値を読込
各従業員のスケジュール開始時間 = worksheets("従業員A").range("a" & i) as date
各従業員のスケジュール終了時間 = worksheets("従業員A").range("b" & i) as date
'全従業員ワークシートの時間を比較させる値を読込
全従業員のスケジュール開始時間 = worksheets("全従業員").range("c" & j)
'全従業員ワークシートの時間が各従業員の開始時間と全従業員のワークシート時間以上、且、終了時間未満の場合
if 全従業員のスケジュール時間 >= 各従業員のスケジュール開始時間 and 全従業員のスケジュール開始時間 < then
'〜スケジュールの詳細をworksheets("従業員A")からworksheets("全従業員")へ値を渡す処理
【知りたい事】
ここで「全従業員のスケジュール時間 >= 各従業員のスケジュール開始時間」の値が「8:00 = 8:00」だと条件が通らない、
かといって「9:30 = 9:30」なら通ったりするため、八方塞な状況です。
・各従業員の開始・終了時間は入力規則のリストから選択
・全従業員の時間は予めワークシートに表記済
原因がわかる方、レクチャーをお願い致します。
0655デフォルトの名無しさん
2014/09/23(火) 18:33:24.99ID:DADtgFDk変数名長いと読みにくいな
しかもあちこちソース不備があるし
比較が「8:00 = 8:00」ってなってるが、これがホントに比較してるデータなら
コロンの全角と半角が違ってるから、文字列として一致していない
実際に比較するときの、変数の型確認して見ろ
0656デフォルトの名無しさん
2014/09/23(火) 18:46:47.42ID:DADtgFDkサンプルとかヘルプとか更新されてないっぽいからなぁ
2007でもWorksheetFunction.Matchのヘルプに
検査値が見つからない場合は、エラー値 #N/A が返されます
とか書いてあるけどまあ嘘だしな、これ
0657デフォルトの名無しさん
2014/09/23(火) 18:49:34.19ID:DADtgFDk使い方次第だが、実際の方法としては CallByName ぐらいじゃね
0658デフォルトの名無しさん
2014/09/23(火) 18:53:47.50ID:BgveuF20失礼しました。
'各従業員のスケジュール
Dim スケジュール1開始 As Date
Dim スケジュール1終了 As Date
スケジュール開始1 = worksheets("従業員A").range("a" & i)
スケジュール終了2 = worksheets("従業員A").range("b" & i)
'全従業員のスケジュール
Dim 比較時間 As Date
比較時間 = Worksheets("全従業員").Range("c" & i)
'比較時間が各メンバーのスケジュール1開始と比較時間以上、且各メンバーのスケジュール1終了以下の場合
If 比較時間 >= スケジュール1開始 And 比較時間 < スケジュール1終了 Then
'値は8:00 = 8:00 だと通らず、 9:30 = 9:30 だと通る
8:00の全角コロンは間違いです。
実際の比較はどちらも同じ時間・書式でされています。
0659デフォルトの名無しさん
2014/09/23(火) 19:03:19.10ID:DADtgFDk>8:00 = 8:00 だと通らず、 9:30 = 9:30 だと通る
変数は比較、開始、終了で三つあるんだが
ブレークポイント張るとかして、ちゃんと三つ全部の、実際に入ってる値を確認してみろよ
時刻比較で有りがちなのは、書式で表示されてないけど日付が違うパターンが多い
0660デフォルトの名無しさん
2014/09/23(火) 22:58:26.50ID:Nn4DQhnVネットワークにあるファイルを開くためのダイアログで
デフォルトとしてあるフォルダから選択するようにするにはどうすればいいでしょうか?
そのフォルダは、\\、で始まるやつです。
通常ならドライブを指定して、それからフォルダを指定するのだと思いますが
\\で始まるからドライブが指定できない。
0661u
2014/09/24(水) 03:19:35.98ID:Znpi/janオーストラリアのサメを調べていた研究者がそんな疑問にぶつかった。
このホオジロザメは4カ月前、追跡用のタグを付けて海に放していた。
ところがその地点から4キロほど離れた海岸にタグのみが漂着。
調べたところ、温度が突然急上昇し、580メートルの深さまで一気に潜っていたことが分かった。
研究チームは、サメが別の生物にのみ込まれたために温度が急上昇し、
その生物が潜った深さが装置に記録されたと推測。
しかしどんな生物かは分からなかったため、この一帯の海域を詳しく調べた結果、
さらに巨大なホオジロザメが生息していることを確認した。
0662デフォルトの名無しさん
2014/09/24(水) 04:16:31.40ID:TqR8ySbH0663デフォルトの名無しさん
2014/09/24(水) 08:42:54.91ID:vJkEy8s/"ファイルを開くためのダイアログ"に 何を使うかで違うけど
Application.GetOpenFilename
だとしても可能だよ
ヒントは田中さんのとこ という事でググってね
それが貴方の哲学(笑)的に どうかは関知しないけど
0664デフォルトの名無しさん
2014/09/24(水) 10:42:50.94ID:4awcA0eB0665デフォルトの名無しさん
2014/09/26(金) 21:18:09.43ID:u91o0w3f上手く伝わるように質問文何度も見返しながら書いてたら
間違いや別の方法考え付いて結局自己解決してしまう。
コードだけ観ててもアカンのね
0666デフォルトの名無しさん
2014/09/27(土) 01:35:11.95ID:DCuWOV5Rつまり問題を言語化していく中で、全体像が浮かんでくるわけか。
0667デフォルトの名無しさん
2014/09/27(土) 02:15:22.43ID:DEOObq5hわかる
人に質問する時、言い切る前に解決しちゃうとか?
0668デフォルトの名無しさん
2014/09/27(土) 02:16:14.64ID:DEOObq5h0669デフォルトの名無しさん
2014/09/27(土) 09:30:07.66ID:z531iquNExcel2010でxlsm形式で保存した下記コードが期待通りに動きません
Sub auto_open()
ThisWorkbook.ChangeFileAccess xlReadOnly
ThisWorkbook.ChangeFileAccess xlReadWrite
MsgBox "表示させたい"
End Sub
書き込み可能になったところで処理が終わってしまいメッセージが表示されません。元はExcel2000で作られたファイルでxls形式のままExcel2010で開くと動作します
どうもxlsm形式でChangeFileAccessが2回走ると処理が止まってしまうようです。この動作が仕様なのか回避方法がないかわかる方はいませんか?
0670デフォルトの名無しさん
2014/09/27(土) 18:07:55.98ID:VNfSjhXWChangeFileAccess のヘルプに
>読み取り専用を書き込み可能に変更した場合は、読み取り専用にしていた間に変更された部分がないことを確認するために、ファイルが改めて読み込まれます。
ってあるけど
そのときにauto_open走ってループしてるんじゃねえか
0671デフォルトの名無しさん
2014/09/28(日) 16:28:14.43ID:g4uidbB6i = 1
Do
i = i + 1
If Cells(i, 6) <> Cells(i, 8) Then
MsgBox "値不一致 & Cells(i, 1) & " 行:" & i
cverr(1000) '←
GoTo err_prc
End If
kensu = kensu + 1
Loop Until Cells(i, 1) = ""
If Err.Number = 0 Then
MsgBox "完了 件数 :" & kensu & "件"
End If
Exit Sub
err_prc:
'Err処理
MsgBox "登録異常 " & Cells(i, 1) & " 行:" & i & vbCrLf & _
" 内容:" & Err.Description, vbCritical
End Sub
On Error の中でチェックをしつつ処理をするようにしています。
ここで質問ですけど、自分でエラーコードを設定することは出来ないんでしょうか?
cverr(1000) '←
のようにすると文法エラーになってしまうんですが。
0672デフォルトの名無しさん
2014/09/28(日) 18:34:39.12ID:SiKgDQdTErr.Raise
0673デフォルトの名無しさん
2014/09/28(日) 19:01:56.11ID:g4uidbB6If Cells(i, 6) <> Cells(i, 8) Then
Err.Raise 1000
GoTo err_prc
End If
err_prc:
If Err.Number = 1000 Then
MsgBox "値不一致 :" & Cells(i, 1) & " 行:" & i
Else
'それ以外のエラー
MsgBox "異常 " & Cells(i, 1) & " 行:" & i & vbCrLf & _
" 内容:" & Err.Description, vbCritical
End If
で出来ました。後はエラーコードがExcelが使ってるものと被らないように
エラーコードを調べておけば良いのかな。
ありがとうございます
0674デフォルトの名無しさん
2014/09/28(日) 19:36:33.35ID:rJB8wEzTgoto文はスパゲッティコードの原因だから使うなってばっちゃが言ってた
0675デフォルトの名無しさん
2014/09/28(日) 19:49:48.37ID:g4uidbB6まぁこの場合は
Err.Raise 1000
の後単純に
Exit Do
で良いのですが^^;
0676デフォルトの名無しさん
2014/09/28(日) 20:55:05.29ID:+CCEmX/F使い方の問題。
0677デフォルトの名無しさん
2014/09/28(日) 21:34:18.90ID:Lr7x15ny結局のところ使い方次第だよな
0678デフォルトの名無しさん
2014/09/28(日) 21:46:50.25ID:v3A9JYrA0679デフォルトの名無しさん
2014/09/28(日) 21:52:46.24ID:QKO3R3Ls以前人が作ったPGにフツーにGotoなんて書いてあるとブチ切れそうになるけど、
GOSUBなんて使えるの初めて知ったよ。
まぁブチ切れそうになるのは変わらないけどね。
0680デフォルトの名無しさん
2014/09/28(日) 22:42:25.98ID:dy7TqO6L例外処理ですが?
0681デフォルトの名無しさん
2014/09/28(日) 22:50:10.24ID:lwUZotcABasic だからなぁ...
0682デフォルトの名無しさん
2014/09/28(日) 23:06:15.28ID:rdw+UIlrFileSystemObjectなのでテンプレ>>2に引っかかる様な気がします
でもVBA以外に知識無いんですけどどこで質問したらいいか教えてください
0683デフォルトの名無しさん
2014/09/28(日) 23:36:29.14ID:lwUZotcAVBScriptについて必死に話し合うスレ 辺りかなあ
http://peace.2ch.net/test/read.cgi/tech/1391694526/
FileSystemObject は VBA のヘルプにも出てくるぐらいなので、ここでもいいような気もするが...
0684デフォルトの名無しさん
2014/09/28(日) 23:58:58.24ID:rdw+UIlrありがとうございます、ちょっと覗いてきます
0685デフォルトの名無しさん
2014/09/29(月) 01:44:46.85ID:lYOkyXy1それなんだよね。「Basicだから」昔の命令が使えるようになってるけど、
それも良し悪しで、.NetでもOn Error Gotoとか使えるの、アレ廃止にして欲しい。
プロシージャ毎にTry CatchやOn Error Gotoころころ変えて使う奴は死んで欲しい。
0686デフォルトの名無しさん
2014/09/29(月) 04:19:15.87ID:ZR32OSxU0687デフォルトの名無しさん
2014/09/29(月) 06:03:54.89ID:HClfAbJC嫌なら C# に行けばいいだけのこと
0688デフォルトの名無しさん
2014/09/29(月) 06:28:41.92ID:lYOkyXy1言ってる意味が分からん。
作り手の意識の問題だろ?
C#になればGoto文が無くなるとでも?
0689デフォルトの名無しさん
2014/09/29(月) 07:09:32.10ID:HClfAbJC> .NetでもOn Error Gotoとか使えるの、アレ廃止にして欲しい。
なら、C# にでも行けってこと。
理解力無さすぎだろ。
> プロシージャ毎にTry CatchやOn Error Gotoころころ変えて使う奴は死んで欲しい。
お前の回りの糞環境なんかに興味はない。
0690デフォルトの名無しさん
2014/09/29(月) 07:30:05.23ID:SCyCB+diだからC#になればGoto文が消えるのか低脳
構造化やObject思考そのものを無視して作って平気なお前のような奴が
つらつらとスパゲッティコードを書いてドヤ顔して持ち越すから殺意を覚えるんだろうが。
環境以前の問題ということすら分かってないし、
C#って名前しか知らないならすっこんでろド低脳
0691デフォルトの名無しさん
2014/09/29(月) 07:36:34.58ID:uxrvmLAqOn Goto は消えるだろうが
わざわざ >>689 で On Goto まで引用してもアホには無駄だったな w
そもそも、そんなアホな文句は作ってる奴に言え
0692デフォルトの名無しさん
2014/09/29(月) 07:46:55.65ID:SCyCB+di本質をすり替えるな低脳。
On Gotoが無くなったからなんだ?
Gotoを使った時点でObject指向としては破綻してるんだよ。
俺はアホかも知れないが、話せば話すほど無知をひけらかすお前はバカとしか言いようが無いな。
0693デフォルトの名無しさん
2014/09/29(月) 08:22:18.56ID:uxrvmLAq> On Gotoが無くなったからなんだ?
>>685
> .NetでもOn Error Gotoとか使えるの、アレ廃止にして欲しい。
人にいちゃもんつける前に、自分が書いたことぐらいちゃんと覚えとけ。
0694デフォルトの名無しさん
2014/09/29(月) 08:33:08.11ID:SCyCB+diはぁ?よっぽどオツムのネジがぶっ飛んでると見える。
今までのスレの流れ見ててなんでOn Error Gotoに限ったことだと思えちゃうわけ?
そんなどこに何使っちゃいけないかくらい
自分で考えられない頭だから低脳だって言うんだよ。なぁ、低脳。
0695デフォルトの名無しさん
2014/09/29(月) 08:39:39.80ID:1duyPuLF三文得してるか?
0696デフォルトの名無しさん
2014/09/29(月) 10:07:23.72ID:KJgZcFnFありがとうございます。やっぱりそんな感じなんですかね
これが、「仕様変更でそうなった」のか「異常だけど以前動いていた」のかはわかりませんか?
頂いた情報から簡単なテストをしてみました
Sub auto_open()
Cells(1, 1) = "変更する"
ThisWorkbook.ChangeFileAccess xlReadWrite
MsgBox "表示される"
End Sub
「読み取り専用を推奨」で保存しファイルを読み取り専用で開くと期待通りに動きました
Sub auto_open()
ThisWorkbook.ChangeFileAccess xlReadOnly
Cells(1, 1) = "変更する"
ThisWorkbook.ChangeFileAccess xlReadWrite
'保存の確認が入る
MsgBox "ここまで処理させたい"
End Sub
いつもどおり読み書き可能で保存して開くと保存確認のメッセージが表示されて処理が中断されました
同じことをしているつもりなんだけどこう・・・なんか
やっぱり処理方法根本から見直さないとダメそうです。ありがとうございました
0697デフォルトの名無しさん
2014/09/29(月) 11:01:47.46ID:uxrvmLAq> 今までのスレの流れ見ててなんでOn Error Gotoに限ったことだと思えちゃうわけ?
お前が書いてるからだろ。
> そんなどこに何使っちゃいけないかくらい自分で考えられない頭だから低脳だって言うんだよ。
お前の頭ん中のことなんて知らんがな。
ちなみに goto 云々言いたいみたいだけど、goto とオブジェクト指向は関係ないぞ。
0698デフォルトの名無しさん
2014/09/29(月) 12:42:22.93ID:SCyCB+di>> 今までのスレの流れ見ててなんでOn Error Gotoに限ったことだと思えちゃうわけ?
>お前が書いてるからだろ。
どこにOn Error Gotoに限りって書いてあるのかな?日本語読めないの?
>>697
>> そんなどこに何使っちゃいけないかくらい自分で考えられない頭だから低脳だって言うんだよ。
>お前の頭ん中のことなんて知らんがな。
ふーん、Object指向一般で言われていることと、人の思い込みとの判別もつかないほど知識が欠落してるくせに
人に口出ししちゃうんだ。そんなことしなければそんな赤っ恥かかなくても済んだのにねぇ。
>>697
>ちなみに goto 云々言いたいみたいだけど、goto とオブジェクト指向は関係ないぞ。
ほー、俺の認識では構造化言語ですら例外処理以外では使わない方がいい認識だけどな。
じゃ、Exceptionの概念があるObject指向言語で、どんなシュチュエーションでGoto文が必要になるのか教えてくれないか?
Object指向だろうが関係無いんだろ?
0699デフォルトの名無しさん
2014/09/29(月) 12:54:54.80ID:9mrfrP8m二重以上のループの中から抜けたいとき。
そのためだけに無駄に関数に切り出してreturnにしたりとかしないといけないのはダサいだろ。
そもそも最近は関数型っぽくなってきてあまりループ書かんけど。
0700デフォルトの名無しさん
2014/09/29(月) 13:13:27.86ID:SCyCB+diへぇー。多重ループから抜けるとき、Goto文使うんだぁー。
しかもそれをさせないためには別途関数切り出したりしちゃわないと出来ないんだー。
これはもう、Object指向以前の問題だなw
お前、VBAからもう一度勉強し直した方がいいよw
俺はこんなのと真面目に会話してたのか・・・確かにアホだわ。俺。orz
0701デフォルトの名無しさん
2014/09/29(月) 14:10:27.13ID:FADDnw+1変なフラグ変数使ったり、インクリメント変数?を無理矢理いじるより分かりやすいと思ってたんだけど。
0702デフォルトの名無しさん
2014/09/29(月) 16:17:04.88ID:iyWMPyYK> どこにOn Error Gotoに限りって書いてあるのかな?
幼稚園児かよ w
お前は On Error Goto について書いたから俺はそれにレスしただけ
他のことは知らんし興味もないからレスする必要もないだろ
理解できたか?
> じゃ、Exceptionの概念があるObject指向言語で
Exception とオブジェクト指向も関係ないぞ w
>>701
普通に Ok
引っ込みつかなくなったバカが暴れてるだけだから気にしなくていいよ
0703デフォルトの名無しさん
2014/09/29(月) 17:21:49.29ID:PXDdRZQDうざいよ
0704デフォルトの名無しさん
2014/09/29(月) 20:25:17.31ID:v3LAIsTaInputboxに入力された文字列が特定のセル範囲(B5〜B55)の文字列と一致したら次のマクロへ行くものを作りたいのですが
特定のセル範囲を指定、参照するための方法で難儀しています。
Vlookup関数を使おうと思うのですがネットや本では情報が少なくなかなか構築出来ません。
御助力願いたく思います。
OS Windows7
Excel 2010
0705デフォルトの名無しさん
2014/09/29(月) 21:12:03.20ID:82y46eor0706デフォルトの名無しさん
2014/09/29(月) 21:31:49.34ID:SCyCB+diお前の程度は知れたからもういいや。
好きなだけスコープ無視してGoto使って好きなだけスパゲッティコード組めばいい。
俺は別に困らない。
0707デフォルトの名無しさん
2014/09/29(月) 21:32:39.79ID:jt92T0Nl普通にfor文とかでループしてチェックしたらいいかなと思う。
無理に関数と絡ませないで。
初心者なら基本的なセルの参照の仕方から入ったほうがいいと思う。
0708デフォルトの名無しさん
2014/09/29(月) 22:01:06.59ID:HClfAbJC涙ふけよ w
0709705
2014/09/29(月) 22:14:54.21ID:82y46eor0710デフォルトの名無しさん
2014/09/29(月) 22:22:52.67ID:FgfVx3KQ最近、似たようなコード書いたわ。
If InStr(Worksheets(sheet_name(i)).Cells(y, x).Value, keyword) Then
こんな感じでfor文で回したらどうだろ
0711デフォルトの名無しさん
2014/09/30(火) 08:40:35.88ID:D10jXUCkWorksheetFunction.CountIf(検索文字, Range("B5:B55")) > 0
VBA的にやりたいならやっぱりfor文のループかね。ありがちなのは
For each checkCell in serachRange
とか
くっそ重いファイルで直接セル参照なんか繰り返してられねーよってなってくるとセル範囲を配列に取り出して〜とかやる
0712711
2014/09/30(火) 08:44:00.39ID:D10jXUCkWorksheetFunction.CountIf(Range("B5:B55"), 検索文字) > 0
最初
WorksheetFunction.Match(検索文字, Range("B5:B55") ,0) > 0
こっち浮かんで引数なおすの忘れた
0713デフォルトの名無しさん
2014/09/30(火) 13:44:04.29ID:GQLqZJ8wVBAコードを実行するボタンをエクセルシートに配置しています
時々ボタンを押して実行するとボタンが小さくなります
再現性や規則性がなくて困っているんですが、原因となるコードなどがあると思いますか?
0714デフォルトの名無しさん
2014/09/30(火) 15:01:58.17ID:SORtUHAP小さくなるのはボタンだけ?
Excelを終了するときに「保存しますか」って聞かれる?
0715デフォルトの名無しさん
2014/09/30(火) 15:08:17.62ID:GQLqZJ8wボタンだけです
実行コードはシート移動や処理が含まれるので、終了時の保存確認はあります
0716デフォルトの名無しさん
2014/09/30(火) 16:29:13.37ID:enG7bkWbズームとか変わってるんじゃないか?
0717デフォルトの名無しさん
2014/09/30(火) 16:34:22.91ID:GQLqZJ8w疑うのもごもっとも
内輪で使用しているのですが、自分も最初笑ってなにやったんだと答えたくらいです
デバイス、バージョンそれなりの組み合わせでまれに発生してます
自分も遭遇した時は笑ってしまいました・・・
何せ押す度にどんどん小さくなっていくんですもの・・・
0718デフォルトの名無しさん
2014/09/30(火) 16:40:07.42ID:enG7bkWbシートでボタンにかかってる行や列削除したら、それに合わせてボタン縮むぞ
0719デフォルトの名無しさん
2014/09/30(火) 16:43:46.99ID:GQLqZJ8wもちろんそれは理解しています
削除に関係するコードはボタン部分にはかかってないです
シート間移動のボタンでも発生していのが、自分の理解を超えているところなんです
0720デフォルトの名無しさん
2014/09/30(火) 16:49:35.00ID:enG7bkWb0721デフォルトの名無しさん
2014/09/30(火) 16:53:49.33ID:GQLqZJ8wやはりそうなりますよね
自分はまだ1度しか遭遇してないので、問題は発生した時に作業可能な環境かどうかなどになります
皆さんありがとうございました
もう少し分析してみます・・・
0722デフォルトの名無しさん
2014/09/30(火) 17:35:24.63ID:UAQxGw3Wfocusあたりとか。
そこにトラップ仕掛けておけば糸口にならないかな?
0723704
2014/09/30(火) 19:16:12.99ID:msJX1nXI結局こんな感じになりました
Sub test()
Dim a
Dim b
Dim c
b = InputBox("入力してください")
c = Len(b)
For Each a In Range("B5:B55")
If c = 5 Then
If InStr(a.Value, b) > 0 Then
If b = "" Then Exit Sub
Call マクロ1
End If
End If
If b = "" Then Exit Sub
Next a
End Sub
0724704
2014/09/30(火) 19:18:49.79ID:msJX1nXI0725デフォルトの名無しさん
2014/09/30(火) 19:57:38.65ID:Lzyb7JP90726デフォルトの名無しさん
2014/09/30(火) 19:59:31.23ID:+B6ncc16いや、別にそんなことはないと思うけど
0727デフォルトの名無しさん
2014/09/30(火) 20:03:14.75ID:msJX1nXIいや、>>707で関数絡ませないでと言っているので
Application.WorksheetFunction.〜
自体避けられているのかなと
0728デフォルトの名無しさん
2014/09/30(火) 20:18:52.86ID:msJX1nXIうざったいと思われるかもしれないがもう一つだけ
>>723で一致した文字列のセルの右隣のセルに数値を加算する場合どのようにすればいいでしょうか?
0729デフォルトの名無しさん
2014/09/30(火) 20:34:43.11ID:7x1dA5IGあーすまん、707だけどVLOOKUPに迷ってる感じの書き方だったし、50件程度のデータだから無理に使う必要もないと思い書いたまで。
forだと言語問わずプログラムの基本だからサンプルも多いだろうしさ。
ただ、自分はworksheetで出来ることはworksheetで終わらせて、VBAではほとんど使わないかな。
roundupとかくらいかな?積極的に使うのは。
ま、ここは好みとかあれば、worksheet関数の方が処理が速かったりと色々。
0730デフォルトの名無しさん
2014/09/30(火) 20:58:51.49ID:2xIMsJb6> If c = 5 Then
> If b = "" Then Exit Sub
b, c はループの中で変わらないからループに入る前に判定した方が分かりやすいよ
あと、変数の型は指定した方がいい
0731デフォルトの名無しさん
2014/09/30(火) 21:05:36.63ID:RxufM98r0732デフォルトの名無しさん
2014/09/30(火) 22:56:01.85ID:/X78r07nワークシートをSQLで操作してる人いない?
試しに実装してみたら保存前のデータも読み書きできるし、
変にうまくいってるもんだから落とし穴でもあるんじゃないかと気になるんだ
0733デフォルトの名無しさん
2014/09/30(火) 23:07:51.16ID:5nwoXrmL0734デフォルトの名無しさん
2014/09/30(火) 23:10:56.54ID:RxufM98rそもそもそんな中途半端なもんいらんという大きな落とし穴がある
0735デフォルトの名無しさん
2014/10/01(水) 00:13:11.81ID:/nUw76iDA列 B列
1行目 名前 番号
2行目 ヤマダ 10
3行目 タナカ 20
4行目 サトウ 30
・
・
・
別のファイルに下記のようなデータがあったとします。
A列 B列
1行目 名前
2行目 サトウ
3行目 タカダ
4行目 オオハシ
・
・
・
このファイルのA列に入力されているそれぞれの名前について、ファイルAのA列で
どの行数にその名前があるかを検索して、B列に入力されている番号を取得して、
このファイルのB列に入力したいのですが、どのようにすれば検索、データ取得、
データ入力がスムーズに処理できるでしょうか。
よろしくお願いします。
0736デフォルトの名無しさん
2014/10/01(水) 00:39:19.57ID:iilx0lFQそれVBA使わんでもVLOOKUPだけで出来るけど
どうしてもVBAでやりたいのか?
0737デフォルトの名無しさん
2014/10/01(水) 05:47:19.81ID:Y6dDxP8G以前から何回もそれについては書いてる。
落とし穴?
ああ、試してないから分からんけど、以前同じ方法でCSVファイルから値を取得しようとして、
項目名に当たるヘッダを大文字、小文字で別項目にしようとしたとき、
別ものとみなしてくれなくて勝手に別名付けられたってのが有った。
多分Excelでも同じことが起こるんじゃないか?
0738デフォルトの名無しさん
2014/10/01(水) 06:04:45.61ID:Y6dDxP8Gそこに載ってる例が単純化したもので、実際にはもっと複雑なことをやってると想定して言うと、
>>732の人が言ってる方法使うとSQL投げればいいからまあ楽と言えば楽。
本当に単純なものだったら>>736の人が言ってる方法が一番楽かな。
0739デフォルトの名無しさん
2014/10/01(水) 10:44:31.32ID:/9i+VWPU>>711でVBA的にやりたいのなら〜って言ったのは融通効かないから
現に>>728みると「やりたいこと」が膨らんでいるわけだしfor eachを選んで正解じゃないかな
ところで、わざわざ文字長調べてInStrで比較チェックしてるのはなんなのだ?
Sub test()
Dim a As Range
Dim b As String
b = InputBox("入力してください")
If b = "" Then Exit Sub
For Each a In Range("B5:B55")
If a.Value = b Then
Call マクロ1
'a.offset(0 ,1) = a.offset(0 ,1) + 1 '>>728に対応するなら
'Exit For 'マクロ1走らせるのが1度きりなら誤作動防止のためにも入れるべき
End If
Next a
End Sub
書いてしまったが「EXCEL VBA 右隣のセル」でくらいはググってほしかったかもしれん
0740デフォルトの名無しさん
2014/10/01(水) 17:05:22.06ID:eAztE/fRやり方としてはまだるっこしいと思うけれど、>>723のやり方だと部分一致で検出できる
>>739だと完全一致のみ検出される
他にもやりようは色々あるけど、俺だったらRange.Findを使う。
0741デフォルトの名無しさん
2014/10/01(水) 17:53:41.81ID:DKX9Y3Cdありがとうございます
参考になりました。
ところで皆さんどうやってVBA学びましたか?
本買ってもあんまり役に立たなくて面喰ってるんですが…
0742デフォルトの名無しさん
2014/10/01(水) 18:09:10.75ID:Y6dDxP8G最初は仕事場に転がってるソース見ながらNetで意味調べてやってたかなぁ。
本はある程度知識が付いて来た後は余り見なくなった。
0743デフォルトの名無しさん
2014/10/01(水) 18:19:04.87ID:eAztE/fR本も何冊か読みましたけど、一番役立ったのはWeb検索でした。
分からないときには適当なキーワードで検索すると
大抵答えが出てるんでとても助かります。
OfficeTANAKAさんとかMougさんとか
その他色々な解説サイトも非常に重宝しますね。
検索しても大抵その辺のサイトは出てきますし。
0744デフォルトの名無しさん
2014/10/01(水) 18:38:03.31ID:68pKVrQC0745デフォルトの名無しさん
2014/10/01(水) 18:48:44.54ID:Y6dDxP8GベーマガってVBAが出るくらいまで出てたっけ?
VBAとN-BASIC系は全然別物だと思うんだけど。
0746デフォルトの名無しさん
2014/10/02(木) 01:21:36.32ID:ywyt30SG目次機能みたいなものが欲しいです
今はF5からジャンプしていますが、メニューがソートされたりカテゴリ分けが出来ないので不便で仕方がありません
0747デフォルトの名無しさん
2014/10/02(木) 06:18:04.82ID:ulPYsQCBリンク見たいにっていうか
セルにハイパーリンク書けばいいんじゃないか
特定セルへの移動もできるし
VBAとか要らんぞ
どうしてもVBAでやりたいならBeforeDoubleClickとかSelectionChangeとかの
イベント使ってやればできなくはないが、保守考えるとお勧めじゃないぞ
0748デフォルトの名無しさん
2014/10/02(木) 08:02:16.37ID:ywyt30SGまさしく実現したい機能そのものでした!
ありがとうございます
0749デフォルトの名無しさん
2014/10/02(木) 08:43:07.47ID:M81Thj4V部分一致で検出できるってのは知ってる
元がVLookup使いたいみたいな話だったから完全一致で一度のみじゃねーの?と思って
というか、部分一致で検出しちゃうから厳密には期待した動作になってるか怪しくね?
まぁ、ただの好奇心
Range.Findでもいいとは思うけど、Excelの検索機能とオプション共有してるからきちんと指定してやらないと誤動作起こすし、逆にExcelの検索のオプションいじられるのも嫌
どうしてもFindNextまで使いたいってときじゃないと使わないなぁ
0750デフォルトの名無しさん
2014/10/02(木) 20:43:46.06ID:jyfn+Ffi0751デフォルトの名無しさん
2014/10/02(木) 20:55:00.29ID:+TLNVR7uできます
AddressOf
0752デフォルトの名無しさん
2014/10/04(土) 00:15:08.54ID:vdHHVoH9つーことは色々できそうですね
0753デフォルトの名無しさん
2014/10/05(日) 12:57:47.89ID:ZPhiPoMgType Person
Name as String
Age as Integer
End Type
と定義したユーザ定義タイプ(?)で配列変数を使用しています。
Dim Person() as Person
ここでExcelシート関数のVLOOKUPように、Personの名前から年齢をひっぱってくるのに
一番単純かつ定番な方法は、どういうコードでしょうか?
0754デフォルトの名無しさん
2014/10/05(日) 12:59:13.79ID:ZPhiPoMgまあそれはそれほど難しくはないけど、ひょっとしていい方法があるのかなと思いまして。
0755デフォルトの名無しさん
2014/10/05(日) 15:09:22.76ID:30lOmxOSまぁ、ユーザー定義型の配列ならFor文で探すしかないんじゃない?
もっとも、代わりにいい方法が無いかと言われればディクショナリを使う方法は有るけど。
0756デフォルトの名無しさん
2014/10/05(日) 15:37:06.29ID:ZPhiPoMgそのディクショナリとはなんですか?
Collectionとは違うのですか?
どういう機能なのですか?
0757デフォルトの名無しさん
2014/10/05(日) 17:57:42.69ID:30lOmxOSいや、少しはググろうよ。
0758デフォルトの名無しさん
2014/10/05(日) 22:25:09.06ID:D9zVmpHm0759デフォルトの名無しさん
2014/10/06(月) 12:52:30.85ID:OCEMuI/eひょっとしてコードからでないとできないのですか?
0760デフォルトの名無しさん
2014/10/06(月) 19:20:13.00ID:nHQnp75N0761デフォルトの名無しさん
2014/10/06(月) 19:49:48.15ID:OCEMuI/eプロパティに「リスト」は無いんですよ。
かわりにListRowsやListStyleやListWidthはあるけど。
0762デフォルトの名無しさん
2014/10/06(月) 19:57:15.85ID:5vMehEVPListFillRangeプロパティ
0763デフォルトの名無しさん
2014/10/06(月) 20:21:48.40ID:OCEMuI/eそんなのないよ
0764デフォルトの名無しさん
2014/10/06(月) 20:28:25.29ID:5vMehEVPどっかのバージョンから 無くなったのか?
http://officetanaka.net/excel/function/tips/tips05.htm
0765デフォルトの名無しさん
2014/10/06(月) 20:45:35.85ID:D2J3InuJ0766デフォルトの名無しさん
2014/10/06(月) 21:32:00.75ID:hFMdywSqexcel2010のグラフ上をクリックしたら
その座標に要素が追加されるマクロを組もうとしています
グラフのmousedown,mouseupイベントで取れるxy座標は
どうもグラフ内の座標ではなく、別の原点から数えた数字のようです
これをグラフ中の系列の座標に変換する方法はありませんか?
0767デフォルトの名無しさん
2014/10/06(月) 23:09:34.41ID:1aJf3StA泥臭い方法としてスクリーン座標を得てWindowFromPointとかでグラフのウィンドウを特定して
グラフの描画領域の長方形の位置を調べてグラフの座標系に変換かなあ
書いててあまりやりたくないなあ
0768デフォルトの名無しさん
2014/10/07(火) 07:40:45.16ID:BDzrKSeMコードのどこで時間がかかっているかを突き止めるための
ツールかなにかはありませんか?
ALT+F11でいつも使うエディタ環境でそういうツールがあれば良いのですが・・・
0769デフォルトの名無しさん
2014/10/07(火) 07:49:56.46ID:BDzrKSeMSet objTest = Nothing
として解放すべきですか、しなくてよいですか?
0770デフォルトの名無しさん
2014/10/07(火) 08:08:56.38ID:fQQLijMg荒らしネタの定番乙です
0771デフォルトの名無しさん
2014/10/07(火) 08:24:55.78ID:g8pr77TKその、いつも使うエディタ環境でF8(ステップ実行)おしっぱにして体感
ブレイクポイント置きまくってF5ポチポチして体感
普通に処理時間を計測するコード入れればいいんじゃねーの?
0772デフォルトの名無しさん
2014/10/07(火) 09:08:58.63ID:g8pr77TKマクロの記録でちょっと覗いてみた
ActiveSheet.ChartObjects("グラフ 1""").Activate
ActiveChart.PlotArea.Select
Selection.Top = 52.102
Selection.Height = 203.72
ActiveChart.Axes(xlValue).MinimumScale = -1
ActiveChart.Axes(xlValue).MaximumScale = 3.5
mousedownの原点がどこだか知らんけどChartObjectsの原点との差分、PlotAreaとの差分でポイント位置求めて
ポイント位置/Height をMinimumScale MaximumScale の比率で合わせる感じか?
横方向もクリックした位置が何項目目の領域なのかを求めて、とかか
軸の向きにも注意かね(グラフは下から上に増える・位置座標は上から下に増える)
系列が複数あった場合はもうシラネ
0773デフォルトの名無しさん
2014/10/07(火) 09:26:41.44ID:8v3U01k9必ずして下さい。
高速化云々ではなくお作法として。
0774デフォルトの名無しさん
2014/10/07(火) 09:54:41.84ID:fuGUBakFコード書いてて
Set objHoge = hoge
…
Set objHpge = Nothing
みたいなことはよくやるけど、
For Each objHoge In hoge
…
Next objHoge
のあとに
Set objHpge = Nothing
を入れることはあまり無いな。
何でかって言われると理由は特に無いんだけど。
あと FileSystemObject みたいにコード内の複数個所で使うオブジェクトだと
パブリックで宣言するからNothingするタイミングがつかめない。
こういう場合にはローカルで使うごとに宣言して
その度ごとにNothingするほうがリソースの無駄遣いのような気がする。
0775デフォルトの名無しさん
2014/10/07(火) 12:25:51.31ID:ZHGs/h370776デフォルトの名無しさん
2014/10/07(火) 12:55:01.51ID:GinpV+dZそういうお前はどんな時が無意味でどんな時に意味あるのかちゃんと区別できてるのか?
変数の寿命が尽きる直前ならNothingする意味はないけど
まあわからないなら作法として書いとけばいいんじゃね
0777デフォルトの名無しさん
2014/10/07(火) 13:17:54.15ID:pP8u07NL0778デフォルトの名無しさん
2014/10/07(火) 13:34:36.24ID:fuGUBakFむしろ初期化や後始末を言語任せ・システム任せにするほうが
よほどバカプログラマを産んでると思う。
俺にとってNothingを入れるのは
その変数の使われてる部分を明確に意識付けするための手段なので、
そう考えると For Each のときにNothingしてないのは
Nextの時点で区切りが付いてると無意識に考えてるからかもしれない。
0779デフォルトの名無しさん
2014/10/07(火) 13:50:26.78ID:GinpV+dZForループの意識はまあわかる
たがVBAではForループでのスコープはない
Staticという、スコープを抜けても寿命の尽きない変数もある
人間はミスをするんだから、システム任せに出来るところは任せる方がミスは減ると思うけどね
初期化をシステムに任せてバカになるほどプログラミングは単純な作業じゃないし
初期化しないと変数に何が入ってるか保障されない言語とか、いまさら恐ろしくて使う気になれん
0780デフォルトの名無しさん
2014/10/07(火) 14:10:24.54ID:DDN2zglu0781デフォルトの名無しさん
2014/10/07(火) 14:16:21.08ID:BDzrKSeMやっぱりそうやるしかないんですか。
というかみんなそうしてるんですか。
なにかものすごいツールでもあると思いましたが。
しかしなんか盛り上がってますね (ワラ
0782デフォルトの名無しさん
2014/10/07(火) 18:36:49.82ID:RmI68rZwこの後Nothing代入時にメモリが解放されるかどうかという流れ
0783デフォルトの名無しさん
2014/10/07(火) 19:18:23.92ID:GinpV+dZVBA向けのプロファイラがいくつかあった気がする
ググってみたら?
0784デフォルトの名無しさん
2014/10/07(火) 21:25:16.21ID:QmqH+DBrメモリにゴミが残ることが有るって聞いてから、
怪しげなのは一応Nothing書くようにしてる。
でも無意味にやるのも何かアレなんで、.Net使ってるときは出来るだけDisposeメソッドを実装してUsing
使うようにしてるかな。
VB6やVBAで同じ様なことをやろうとすると、
With New クラス名 みたいになると、VB6のスレで言ってる人がいたけど、
何故かその方法はあのスレでは忌み嫌われていたみたい。
0785766
2014/10/07(火) 23:35:31.20ID:y3mcae+Eググって出てきた良サイトが非常に参考になりました。
要点は3つあります。
1.range("a1")の左上xy座標を取るメソッドがある
2.chartareaのtop,left,width,heightの座標はrange("a1")からの相対座標
3.相対座標はすべて72ppiでマウス座標は96dpi
4.上記の変換とズーム倍率を考慮して距離の変換をする
これでマウスでクリックした座標に要素を追加することができますた
0786デフォルトの名無しさん
2014/10/08(水) 06:33:01.15ID:cp4LepTBポイントとインチは長さの単位だから、環境にかかわらず同じ
1インチ=72ポイントだから、72ppiはまあ正しいんだけど
dpiは解像度の単位だから、環境が変われば変わる可能性は有るぞ
96DPIってのは今のWINDOWSの標準的な設定での話
ただVBAで直接その値を取る方法はないっぽいけど
0787デフォルトの名無しさん
2014/10/08(水) 21:34:35.31ID:XyELhX/gこのサイトはちょっと神だった。
完全にやりたいことのエッセンスが全部かかれてた
http://home.att.ne.jp/zeta/gen/excel/c04p06.htm
0788デフォルトの名無しさん
2014/10/08(水) 22:10:02.55ID:0nBP/2kH0789デフォルトの名無しさん
2014/10/08(水) 22:14:24.26ID:cp4LepTB直接って意味通じなかった?
API良べば取れるけど、それはVBAの直接の機能じゃないから
0790デフォルトの名無しさん
2014/10/08(水) 22:19:27.00ID:cp4LepTB○API呼べば
あとときどき、ポイントって言葉をドット数の意味で使ってる文章もあるから注意な
0791デフォルトの名無しさん
2014/10/08(水) 23:00:42.17ID:pLmgaWPq0792デフォルトの名無しさん
2014/10/08(水) 23:47:10.00ID:UFd7lKdk>>787のサイトは検証用にしかAPIは使ってないぞ
0793デフォルトの名無しさん
2014/10/08(水) 23:52:58.12ID:0nBP/2kHポイントはコンピューターができる前から印刷業界で使われてる文字サイズの単位
ドットは表示装置や印刷装置の最小単位
0794デフォルトの名無しさん
2014/10/09(木) 00:13:22.66ID:1Jbx/p96>ドットは表示装置や印刷装置の最小単位
解像度の大きな液晶ディスプレイをVGAモードで使ったりすると
画面の1ドット=1ピクセルじゃなくなるけどな
ドットには点っていう以上の意味はない
それ以外の意味は文脈で判断しろ
0795デフォルトの名無しさん
2014/10/09(木) 00:23:22.68ID:1Jbx/p96誰へのレスだよそれ
>>786へのレスだとするなら
そのサイトのVBAのコードでは96DPIで決め打ちしてるからな
検証で値しらべるならその値を使えば良いのにとも思うが
まあAPIは本筋じゃないと考えてるのかもしれん
0796デフォルトの名無しさん
2014/10/09(木) 06:43:38.28ID:6IcNd+Zb0797デフォルトの名無しさん
2014/10/09(木) 07:34:27.41ID:1Jbx/p96どの座標系化は置いといて、MouseDownで位置は取れるって話から始まってるわけですが
0798デフォルトの名無しさん
2014/10/09(木) 18:42:01.62ID:FQmwM76kブックを開くときとか印刷するときの操作とかいろいろあるようですが
具体的にどう使用すればいいか思い浮かばないです
0799デフォルトの名無しさん
2014/10/09(木) 18:46:27.75ID:Nbu2CYiA使い道のわからない道具が自分の役に立つとか思うわけ?
0800デフォルトの名無しさん
2014/10/09(木) 20:30:42.90ID:otWTg9aK0801デフォルトの名無しさん
2014/10/09(木) 20:37:10.58ID:/IXmqSOL0802デフォルトの名無しさん
2014/10/09(木) 21:02:19.88ID:FQmwM76k使い方わかればやりたいことが浮かぶ場合もあるでしょ
選択肢を増やしたいだけですよ
0803デフォルトの名無しさん
2014/10/09(木) 21:37:18.59ID:/IXmqSOL0804デフォルトの名無しさん
2014/10/09(木) 22:00:18.20ID:yXhns5Mt0805デフォルトの名無しさん
2014/10/09(木) 22:33:26.25ID:otWTg9aKこんなピンポイントな機能を宿題にする学校があるかよ
ひょっとして、大学とか言うところに行ったら、なんかわからんけど難しいことやってるらしいから、Excel の全ての機能が宿題に出るとか思ってたりして w
0806デフォルトの名無しさん
2014/10/09(木) 23:50:25.77ID:/IXmqSOLが普通じゃないの?
イベントってのがある→この機能使って何かできないか?
なんてこと考えるのは暇な学生か、学校の宿題かなと。
資格取る系の専門学校ならイベント使ってなんか書いてこいってありそうだし
すれ違いなんでこの辺で。
0807デフォルトの名無しさん
2014/10/10(金) 00:03:28.54ID:EHlSM9Y1本人が見てないときに記述したりとか
0808デフォルトの名無しさん
2014/10/10(金) 00:11:55.36ID:5oxKWxyBさりげなくえげつないな、ヲイ w
0809デフォルトの名無しさん
2014/10/10(金) 00:34:22.66ID:JVLooUg+どういう意味?
0810デフォルトの名無しさん
2014/10/10(金) 11:57:55.66ID:JVLooUg+For Each obj in Selection.Cells
・・・・
Next obj
の記述ですべての対象オブジェクトを処理することができますが
・配列のすべての要素
・セル選択範囲をVariant型の変数に入れて、そのすべてのセル
にある処理をしたい場合、どうしたらいいのでしょうか?
0811デフォルトの名無しさん
2014/10/10(金) 13:53:55.74ID:nfu2OY0nFor Each obj in (Variant型の変数)
・・・・
Next obj
0812デフォルトの名無しさん
2014/10/10(金) 14:04:52.59ID:VoLeXZi+変数にはデフォルトプロパティであるValueの配列、つまりセルの値の配列が入り
そこには値の情報だけでセルそのものの情報(アドレスなど)が無いから、
それを元にセルへの操作をすることは出来ない
Variant型変数にセル範囲をSet使って参照代入してるなら
その変数はセル範囲のオブジェクトと同じなので>>811でいける
0813デフォルトの名無しさん
2014/10/10(金) 18:47:40.76ID:cGiw//Qiなぜに Variant なの?
Range 型でいいと思うが
0814デフォルトの名無しさん
2014/10/10(金) 21:52:33.78ID:HyTC8hvE表示させる行数とアイテム数は同じなので、おそらく行の高さが足りないせいだと思うんですが
ドロップダウンの行の高さって変更できますか?
0815デフォルトの名無しさん
2014/10/10(金) 22:02:15.04ID:HyTC8hvE>>814は無視してください
0816デフォルトの名無しさん
2014/10/10(金) 22:24:40.26ID:MdI71dED呼び出すときに
call hoge(a,b)
か
hoge a,b
で呼び出しますが、
後者のように括弧を付ける必要がない関数の呼び出し方に名前は付いていますか?
ずっと
hoge(a,b)で呼びだそうとしてハマっていまして、勉強したいなぁと思った次第です
0817デフォルトの名無しさん
2014/10/10(金) 22:55:32.74ID:de2+aj1W0818デフォルトの名無しさん
2014/10/12(日) 00:55:12.07ID:/KY4YfKQcallステートメントなしの呼び出しは、たぶん古い文法。C言語やJavaがメジャーになっているいまでは、誰が見ても分かりにくい。callステートメントで呼び出すべき。
0819デフォルトの名無しさん
2014/10/12(日) 02:25:36.21ID:6IYKdj0BCやJavaで、Callに該当する「関数・メソッドを呼び出す命令」を教えて欲しいもんだ
0820デフォルトの名無しさん
2014/10/12(日) 16:11:59.03ID:JzEmhAxbイミディエイトウィンドウに
?ThisWorkbook.Worksheets("Chart").ChartObjects(3).name
と打ちEnterすると
4
が返ってきます。これは理解できます。
インデックス番号とチャート名が必ずしも一致していないからです。
下のように打ち込みEnterで
?ThisWorkbook.Worksheets("Chart").ChartObjects("3").name
この結果となります。
4
"3"というチャートオブジェクトの名前は"3"と期待していたのに"4"という結果でした。
ChartObjectsに"3"という名前でアクセスできないのでしょうか?
0821デフォルトの名無しさん
2014/10/12(日) 16:52:46.90ID:JzEmhAxb(今まで"2"という名前のチャートは"Chart_2"という名前に変更しました)
0822デフォルトの名無しさん
2014/10/12(日) 22:45:21.32ID:O7/KUbKNCやJavaでcall相当句かがないから
VBbAではcallを使わないのがナウいと思うのだがちがうのか?
その場合、カッコを使いたいのに使えない違和感は残るが。
0823デフォルトの名無しさん
2014/10/12(日) 23:24:09.48ID:+YSzC4gtこのしきたりさえ守っていればどっちでもいいんじゃないかと思う。
これはVBAに限らずVBでも同じ。
0824デフォルトの名無しさん
2014/10/12(日) 23:31:49.26ID:O7/KUbKNでは、それどっちがカッコいいですかね?
0825デフォルトの名無しさん
2014/10/13(月) 02:20:43.77ID:K6UGdcTnエクセルに画像を貼り付けて、「問題開始」というボタンを用意してそれをクリックしたら上記フォームがでるようにします。
そのフォームで任意の場所を右クリックしたら問題をシートのセルから呼び出して,その後「正しい」「間違い」をクリックすれば,右側に正誤の○×と解説がでるようにしたいです。
その後シートの別セルから解説を呼び出す。そのあと右クリックしたら次の問題がでて,戻りたい場合は左クリックを押せば1問戻る。
というようなVBAを作りたいです。
コードを作成していただけないでしょうか?
0826デフォルトの名無しさん
2014/10/13(月) 05:20:35.79ID:vRAUewd30827デフォルトの名無しさん
2014/10/13(月) 12:10:57.56ID:jfQv/DEB私がやりましょう
見積額は5万円(税別)です
バグには対応しますが改善の提案や仕様の変更や追加は別料金です
0828デフォルトの名無しさん
2014/10/13(月) 13:54:12.06ID:dwdekEXY0829デフォルトの名無しさん
2014/10/13(月) 14:53:39.72ID:K0lQn6l5仕様書まで書いてくれるなら、俺が5千円でやってやるよ
仕様書書けないと、細かいところは作りながらサンプル使って貰っての調整になるので3万な
0830デフォルトの名無しさん
2014/10/13(月) 16:03:41.32ID:c0FdQNYRpassはkop VBAのパスは00000
元ネタのエクセルはこのとおりなんですけど
いちいち正しい誤りを選択して解答するという手間と
表示される○×が解答に対しての○×なのでわかりづらいところが一番ネックです
例えば誤りが正解で解答を正しいとした場合「正しい(取り消し線あり) 誤り」のような表記にしたいです。
>>829さんどんなものでしょうか?
0831デフォルトの名無しさん
2014/10/13(月) 16:28:56.52ID:K0lQn6l5なんでここまで作れて、質問というか依頼の件を作れないのか不思議だ
もしかして他人が作ったものを手直ししたいとかなのかな?
ここまで作れるくらいの能力はあるってなら、ここのレスを使って文章やコードを回答し
それを依頼者自身がブックに組み込めば解決するが
他人が作った物で、VBAは殆ど分からないってなら、ブックとして仕上げてやらないと
どうにもならんだろう
その辺はどうなんだい?
例えば
Private Sub CommandButton1_Click()
を
Private Sub Answer(q As Long)
に書き換えて
Private Sub CommandButton1_Click()
Call Answer(1)
End Sub
Private Sub CommandButton2_Click()
Call Answer(2)
End Sub
のコードを追加し
CommandButton1のCaptionを"正しい"
新たに作ったCommandButton2のCaptionを"誤り"にする
そしてCommandButton1,2をフレームの中に入れて、サイズと位置を調整する
なんて解説で理解できるのかな?
0832デフォルトの名無しさん
2014/10/13(月) 17:34:10.60ID:UPM0IlOC(VBScriptから)そのブックにVBAマクロを埋め込んで、
(VBScriptから)そのマクロを実行させる
というようなことをしたいと思います
昔同じような処理を書いた気がするのですが、2行目の方法を思い出せずにいます
もしできるのであれば2行目の方法が知りたいです
0833デフォルトの名無しさん
2014/10/13(月) 18:26:40.48ID:pMXJ+1G0おれが勉強がてら29800円で試作してやるよ
0834デフォルトの名無しさん
2014/10/13(月) 18:29:57.58ID:pMXJ+1G0なんでエクセルで234Mもあんだよw
0835デフォルトの名無しさん
2014/10/13(月) 19:40:00.09ID:4xgZUT3/(VBScriptのスレに)行けば白桃みたいな名前の人が教えてくれるよ
0836デフォルトの名無しさん
2014/10/13(月) 20:45:08.99ID:M+L2tDc7なんか間違ってないか?
俺が>>830からダウンロードしたのは
サイズが229KB (234,756バイト)になってるけど?
0837デフォルトの名無しさん
2014/10/14(火) 01:43:55.59ID:zpHmU28Q最近見ないと思ったら別んとこ居たのね
0838デフォルトの名無しさん
2014/10/14(火) 21:49:01.83ID:/bXqI/YDレスありがとうございます
おっしゃるとおりVBAは殆どわからない者です。
コマンドボタン1を押したら答え1を呼び出して
コマンドボタン2を押したら答え2を呼び出す。
とやりたいことはなんとなく自分でもわかるのですが
具体的なコードの記述がさっぱりですから・・
Private Sub Answer(q As Long)
End Sub
Caption
の意味はわかりません・・・
0839デフォルトの名無しさん
2014/10/14(火) 22:12:13.02ID:o4U/JqTO入門書でも読めよ!
0840デフォルトの名無しさん
2014/10/14(火) 22:26:20.70ID:7vQffhSKカエルのやつおすすめ
0841デフォルトの名無しさん
2014/10/16(木) 16:14:24.72ID:Z4Itq52Sもし該当の検査値がなければエラーを出さずに空欄""を返すようにしたいのですが
どうしますか?
0842デフォルトの名無しさん
2014/10/16(木) 20:22:59.30ID:2oOPO/RwOn Error
0843デフォルトの名無しさん
2014/10/16(木) 20:38:54.84ID:dCooRIFL今のバージョンでも使えるかどうかわからんが
Application.VLookup使って、VarTypeなりIsErrorなりでチェックする
だめならOn Errorでエラー拾うしかないんじゃね
0844デフォルトの名無しさん
2014/10/19(日) 13:25:50.68ID:VcRItLWHあちらのスレにはこちらに書き込むことを書き込みます。
【1 OSの種類 .】 Windows7
【2 Excelのバージョン 】 Excel10
【3 VBAが使えるか .】 はい
【4 VBAでの回答の可否】 可
大量のアンケートがあるので、集計フォームを作って入力と集計を行おうと思ってます。
それぞれ対応したオプションボタンを押すと、対応したセルに1を代入するみたいな事ってできますか?
イメージとしては下記のような感じです。
10代 20代 30代 男性 女性 独身 既婚
○ ○ ○ ○ ○ ○ ○
入力←ボタン
10代 20代 30代 │ 男性 女性 │ 独身 既婚
1 1 1
1 1 1
1 1 1
また、アンケートは沢山あるので、入力のボタンを押したら、フォームに入力した内容をクリアして
表内の次の行の先頭の列にアクティブなセルを移動して、次のアンケートを1個下の行に入力する事もできますでしょうか?
今までは手で入力してたのですけど、アンケートの量が膨大過ぎて、こんな事ができたらいいなと思っています。
VBAのユーザーフォームで作成しようと思っています。
0845デフォルトの名無しさん
2014/10/19(日) 13:58:17.66ID:QQzlmOcf可能です
それぞれのボタンにCommandButton_Clickイベントがあるので、そこでセルに数字を書き込んだり行を移動したりするだけです
0846デフォルトの名無しさん
2014/10/19(日) 14:01:30.09ID:QQzlmOcf少しおせっかいになりますが、セルに書き込むデータはこのようにした方が集計が楽になりますよ
年代 性別 家族
10 1 1
20 2 2
10 2 1
30 1 2
0847デフォルトの名無しさん
2014/10/19(日) 16:00:42.76ID:VcRItLWHなるほど、CommandButton_Clickに仕込むのは思いつきませんでした。
最終的に入力するコマンドボタンに対して設定が必要と思っていました。
ボタン毎に個別に設定すればいいのですね。
これからその方法を勉強してきます。
ありがとうございました!
顧客のフォーマットがこの入力方式で、変更不可なのです。
その形のほうが入力も集計も絶対楽ですよね・・・・
0848デフォルトの名無しさん
2014/10/19(日) 16:06:43.16ID:QQzlmOcf選択肢のグループごとにラジオボタンにまとめた方が、入力の重複とか考えなくていいから楽かな
0849デフォルトの名無しさん
2014/10/19(日) 16:28:23.56ID:OAm8Axmx「入力」のCommandButton_Clickで一括入力した方が、絶対に良いと思うけど
それじゃダメな理由って何かあるの?
OptionButtonのイベントは何も使わず
「入力」のCommandButton_ClickでOptionButtonの状態を取得し
.UsedRange.Rows.Count + 1 の行に入力、OptionButton.Value = Falseで
選択状態のクリア、これだけでいいと思うのだが
あとは更に効率化するならショートカットキー入力って手もある
例えばテンキーで
7=独身 8 9=既婚
4=男性 5 6=女性
1=10代 2=20代 3=30代
として、10代、男性、独身なら、「1,4,7,Enter」
30代、女性、独身なら、「3,6,7,Enter」
+ - * / も使えるから、仮に年代だけで0〜9全部使っても問題ない
キー入力はUserForm_KeyPressで取得できるし
ラベルに入力内容を表示すれば、Enterでシートへの入力をする前に確認できる
テンキーではなく文字キーボードの方で、上段の1,2,3,4,5を年齢にして、あとはEnterから近いところで
@=独身 「 =既婚
:=男性 」=女性
なんて仕様にも出来る
0850デフォルトの名無しさん
2014/10/19(日) 18:14:22.69ID:YnlAiiUt『'Axes'メソッドは失敗しました。'_Chart'オブジェクト』というエラーメッセージです。
For i = 1 To 20 'チャートの数だけ繰り返す
With ws_chart.ChartObjects(i).Chart
.Axes(xlValue, xlSecondary).MinimumScale = 0
.Axes(xlValue, xlSecondary).MaximumScale = 1
End With
Next i
私の予想ですが、このチャートに第二軸が設定されていないためと思います。
複数あるチャートのうち、第二軸があるチャートのみ第二軸の最小値と最大値をセットしたいのです。
チャートに第二軸があるかどうかをどのように判断したらいいのか教えてください。
0851デフォルトの名無しさん
2014/10/19(日) 18:20:29.92ID:QQzlmOcfAxes.Count
0852デフォルトの名無しさん
2014/10/19(日) 18:39:34.28ID:YnlAiiUt解決しました
素早い回答ありがとうございました
0853デフォルトの名無しさん
2014/10/22(水) 15:25:06.57ID:vca6kidmシートAにあるC17の内容が変更されるとシート2chの表に罫線を引いていく
という事をやりたいのですが、途中のActiveWorkbook.RefreshAllで処理が終了してしまいます。
エラー等は出ていないのですが、Worksheets("2ch").Select以下が処理されないのはなぜなのでしょうか?
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("C17")) Is Nothing Then
Exit Sub
End If
ActiveWorkbook.RefreshAll
Worksheets("2ch").Select
Dim s As Long
For s = 4 To 200 Step 1
If Cells(s, 7) <> "" Then
Range(Cells(s, 1), Cells(s, 7)).Borders.LineStyle = True
End If
Next s
End Sub
0854デフォルトの名無しさん
2014/10/22(水) 19:58:46.60ID:zmVW/SKG>.Select以下が処理されない
そんなことはない。ちゃんと処理されている
罫線引きたいシートはどっちだ?
シートモジュールでシート省略したCellsはそのシートだぞ
つまり、そのコードでは、検査してるセルも罫線引こうとしてるセルもシートAだぞ
0855デフォルトの名無しさん
2014/10/23(木) 00:15:30.96ID:muexFl6z例として、配列dの全ての要素に1を入れようとしています。
Sub a()
Dim d(2) As Long
For Each Key In d
Key = 1
Next
MsgBox d(0)
End Sub
これはうまく行きませんでした。
このように書くしか無いでしょうか?
Sub b()
Dim d(2) As Long
For i = 0 To UBound(d)
d(i) = 1
Next
MsgBox d(0)
End Sub
また、なぜ上では上手く動かないのでしょうか
0856デフォルトの名無しさん
2014/10/23(木) 00:36:20.02ID:v83fov2u配列要素へのリファレンスではない
0857デフォルトの名無しさん
2014/10/23(木) 00:41:09.32ID:MyanTN6OKeyとd(x)はあくまで別の変数で、ループのたびにd(x)からKeyに値がコピーされるから
0858デフォルトの名無しさん
2014/10/23(木) 00:47:40.34ID:09ABF8gu推奨は
For i = LBound(d) To UBound(d)
0859デフォルトの名無しさん
2014/10/23(木) 00:50:01.23ID:PmBkK17wFor Each 変数 In グループ
の場合、
グループが連想配列(コレクション)なら変数は参照になるが
グループが単純な配列なら変数は複製になる
言ってしまえば引数のByValとByRefの違いのようなもの
なので
> このように書くしか無い
というか、元からそのように書くべき仕様になっているわけだ
そもそも、Long型配列の要素を取り出す変数にLong型を指定出来ず
KeyはVariant型にしなければならないということからも解る通り
For Eachは単純な配列の要素を取り出すのに適した設計になってない
つまり、単純な配列にはFor、連想配列にはFor Eachが仕様上の適材適所
0860デフォルトの名無しさん
2014/10/23(木) 01:09:23.44ID:MyanTN6O>言ってしまえば引数のByValとByRefの違いのようなもの
微妙にいいかげんな事を言ってるな
値渡し/参照渡しと値型/参照型の区別ができてない予感
ループ変数にNothingをSetしても、もとの配列変数がNothingになったりしないぞ
つまりループ変数への渡し方としては型に関係なくByValだ
0861デフォルトの名無しさん
2014/10/23(木) 08:04:10.23ID:R1nuVt9+逆に実際の値から定数変数を見つけるにはどうしますか?
言ってるのは、色の定数変数でvbYellowから65535はイミディエイト窓で「? vbYellow」と打ち込めばすぐわかるけど
49407からそれに対応する色の定数変数を知りたいのです(コードの可読性を高めるためですもちろん)。
定数は色に限らず罫線で使う定数とかその他さまざまなことも含み一般的にどう見つけるか知りたいです。
0862デフォルトの名無しさん
2014/10/23(木) 08:05:48.74ID:R1nuVt9+あるセルに色をつけてその色をコードで使いたいので
その色のセルを選択(Avtivate)して「? Activecell.Interior.Color」と打ち込んだのですよ。
0863デフォルトの名無しさん
2014/10/23(木) 08:23:38.90ID:ljExcPDI数値が特異的なものなら、ぐぐったら出てくるかも。
色の場合は、49407の16進数表記 &HC0FF& の方がわかりやすいかもしれない。
RGB()を使うって手もあるかな。
定義済みの定数変数が必ずあるとは限らないし。
定数変数は、意味から調べて使うものだと思う。
0864デフォルトの名無しさん
2014/10/23(木) 08:24:07.61ID:RUH3XcXLヘルプとかMSDNにあったような。
0865デフォルトの名無しさん
2014/10/23(木) 08:50:29.97ID:muexFl6zなるほど、よくわかりました。ありがとうございました!
0866デフォルトの名無しさん
2014/10/23(木) 10:07:31.75ID:09ABF8gu定数の一覧はオンラインヘルプで「色の定数」で検索すると出てくるけど、
1600万以上ある色のうち定数が定義されているのはわずか8色のみ
希望の色の定数は存在しないと思って間違いない
自分がよく使う色がある場合はアドインなどを自作しておくといいかも
たいがいの定数は実際の値が何かを気にせずに使うようになっている
むしろ数字に置き換えるのは可読性や互換性の観点から推奨されない
0867デフォルトの名無しさん
2014/10/23(木) 10:39:50.55ID:WaYYqABm希望の色があるかわんらんが
Excel 2007 以上なら たぶん これが使えるとおもうよ
XlRgbColor 列挙 (Excel)
http://msdn.microsoft.com/ja-jp/library/office/ff197459(v=office.15).aspx
0868デフォルトの名無しさん
2014/10/23(木) 11:25:13.87ID:09ABF8guなるほど、ヘルプにも同じリストが入ってたわ (2010)
http://up2.cache.kouploader.jp/koups11743.png
0869デフォルトの名無しさん
2014/10/23(木) 11:44:59.46ID:R1nuVt9+~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
0870デフォルトの名無しさん
2014/10/23(木) 12:03:41.49ID:ljExcPDIヘルプ見ましょう^^
>867-868で具体的な方法が示唆されてるのに、なんでわからないかね。
ていうか、49407で定義されてる色定数があったとしても、
それに置き換えて本当に可読性上がるかどうかは状況次第。
Private Const ma_bgcolor_warning As Long = &HC0FF&
とか定義してこれを使う方が、可読性上がって変化にも強くなる…かも。
0871デフォルトの名無しさん
2014/10/23(木) 12:36:33.21ID:zTiBmqHW0872デフォルトの名無しさん
2014/10/23(木) 12:55:48.84ID:wVXZyphHアイボリーとかターコイズ位ならまだしも、ゲーンズボロとかモカシンとか書かれても、色が想像できないし
0873デフォルトの名無しさん
2014/10/24(金) 16:12:16.62ID:FHgP9zzb使用OS windows7
使用excel 2010
◆仕様
用意された複数のビンゴカードデータの中から、ビンゴになったカードを探し出すプログラム
◆前提
ビンゴカード;5マス×5マスのカードです。中央はゲーム開始時に穴空いてます。excelに手入力
ビンゴゲーム:抽選番号は人力のクジで抽選される 抽選されるたびにフォームに手入力する
1. カードデータはすべて事前に手入力する。(100件くらいのビンゴカードのデータを用意)
2. ビンゴカードのデータは登録順に数字を振りあてられる
3. 他ソフトでビンゴを実行する
4. ビンゴソフトで出た順に1-99までの数字をプログラムに入力していく。
5. 数字の一致しているビンゴカードナンバーを表示
6. 用意されたデータからリーチ・ビンゴになったカードのナンバーを表示する�rープ音がなるとより良い
よーするにビンゴカード100枚買ったけど一人でシコシコ穴あけていっても間に合わないし気付けないからPCにやらせたいというわけです。
http://www.eurus.dti.ne.jp/~yoneyama/Excel/vba/bingo_game.html
これを参考にしたら上手くイキそうなんですが、プログラムサッパリ分からないため、どういじっていいのかこれもサッパリなのです
0874デフォルトの名無しさん
2014/10/24(金) 16:19:41.56ID:FHgP9zzbos windows7
excel 2010
用意された複数のビンゴカードデータの中から、ビンゴになったカードを探し出すプログラム
◆前提
ビンゴカード;5マス×5マスのカードです。中央はゲーム開始時に穴空いてます。データとしてexcelに手入力
ビンゴゲーム:抽選番号はクジで決められる 抽選番号は選ばれるたびにその場でexcelのフォームに手入力
1. カードデータはすべて事前に手入力する。(100件くらいのビンゴカードのデータを用意)
2. ビンゴカードのデータは登録順に数字を振りあてられる
3. クジで抽選番号がきめられる
4. ビンゴソフトで出た順に1-99までの数字をフォームに入力していく。
5. 数字の一致しているビンゴカードナンバーを表示
6. 用意されたデータからリーチ・ビンゴになったカードのナンバーを表示する�@ ビープ音が出ると尚良
よーするにビンゴカード100枚買ったけど一人でシコシコ穴あけていっても間に合わないし気付けないからPCにやらせたいというわけです。
http://www.eurus.dti.ne.jp/~yoneyama/Excel/vba/bingo_game.html
これを参考にしたらイケそうなんですが、いかんせんプログラムサッパリ分からないためどういじればよいのかもサッパリなのです。
0875デフォルトの名無しさん
2014/10/24(金) 16:20:41.79ID:FHgP9zzb0876デフォルトの名無しさん
2014/10/24(金) 18:29:02.57ID:3FgV77QY�@プログラムサッパリ分からないなら、キッパリ諦める
�Aプログラムの勉強して、解らない部分だけを具体的に質問する
�B金を出して丸投げ依頼する
どれでも好きなものを選んで下さい
要するに、「A.要望通りのプログラムj」「B.勉強する手間」「C.金」のうち
どれか1つだけは妥協しろって話
�@を選べばAは手に出来ないが、BとCは喪失しない
�Aを選べばBは必要だが、Cを喪失せずにAを得られる
�Bを選べばCを喪失するが、Bを掛けずにAを得られる
どれを選択するのも自由だけど、さすがに一つも妥協したくないってなら「さようなら」だ
0877デフォルトの名無しさん
2014/10/24(金) 22:36:47.47ID:ttks8Tdv散れ。
0878デフォルトの名無しさん
2014/10/24(金) 23:41:03.31ID:xQx5lyng0879デフォルトの名無しさん
2014/10/25(土) 00:01:59.68ID:A0j+Rp4Kひとりで100枚穴空けてひとりでビンゴゲームしてひとりで当選したビンゴカードナンバー探し出してひとりで「リーチ!」とか「ビンゴッ!」ってやるつもり?
そもそもここまで詳しく画像付きで書かれてるサイト探し出したのに「サッパリ判らない」てのは、この先説明しようが無いと思うんだが
なんか忘年会の余興で他の連中驚かそうとか鼻高々ピノキオになりたいとか、そおゆう系譜?
それにおまえら手を貸せ? なんならおまえらが作れ? 貸すのは構わないがおまえのお里が知れるぞ? 後日
つうか、そもそも大勢でやるビンゴにこんなもんいらんわな・・ 抽選番号読んで各自で穴空けてリーチやビンゴ!が面白いんだからな・・
一人でシコシコ穴あけて・・ ってヶ所で用途や目的が大不明だわ
0880デフォルトの名無しさん
2014/10/25(土) 00:26:50.15ID:mYI8hEKS毎度してたわ。ビンゴは嫌いです
0881デフォルトの名無しさん
2014/10/25(土) 01:30:30.99ID:jfttnGuy君がこのスレに「さようなら」してくれるのなら大歓迎だよ。
自助努力をしない人を君が個人的に嫌うのは一向に構わないが、
それがこのスレの総意であるかのような物言いは避けていただきたい。
このスレにはそういうの関係なく
ただの自己満足でコードが書きたいだけの人も居るんだよ。
0882デフォルトの名無しさん
2014/10/25(土) 02:05:20.24ID:Htq1vUdRお前らの言う事はどっちももっともなんだが
>プログラム技術@2ch掲示板
>この板はプログラムを作る人のための板です。
だから、丸投げはさすがに違うところで依頼してくれと
0883881
2014/10/25(土) 03:04:18.41ID:jfttnGuy丸投げされたって回答を強要されてるわけじゃないんだから
気に入らないならスルーしとけばいいだけだと思うんだよね。
たとえば俺なんかは職業プログラマーじゃなくて単なるアマチュアなんで
普段は自分の仕事用にちょこっとマクロを組むぐらいしかやること無いわけですよ。
だからコードを書くためのネタを提供してもらえるから丸投げ大歓迎だな。
もちろん、書きたいネタ・わかるネタだけ相手にするから
興味がないときや手に負えないときにはスルーしてるけどね。
0884デフォルトの名無しさん
2014/10/25(土) 06:44:50.81ID:gTYzNJ95今は>>2★5に書いてあるのか。
だから丸投げが嫌な奴は別スレでって話で前回落ち着いたじゃないか。
で、2種類のスレが立って結局丸投げ禁止のスレが淘汰されて今に至ってるんだから
わざわざぶり返して荒らすこともない。
ここは丸投げやコード記述が嫌な奴のオナニースレではないので、嫌なら別スレ建てろってこった。
0885デフォルトの名無しさん
2014/10/25(土) 11:18:21.21ID:gLziX6Noどっちがキチガイかがよく分かるな
0886デフォルトの名無しさん
2014/10/25(土) 13:17:44.47ID:awQCBO24たてようと確認しにいったお前がキチガイだろうなどう見ても
0887デフォルトの名無しさん
2014/10/25(土) 13:37:15.09ID:gLziX6No以前は>>2厳守のスレと丸投げOKスレが両方あったから
今でも両方あるのかなと思って確認したら
900さえ行ってないこのスレの次スレが立ってるのを見つけただけだが、、、
そもそも、俺は>>2崇拝者ではなく、>>2の過剰な崇拝者と
>>2の過剰なアンチを、両方とも嘲笑してるだけだし
0888デフォルトの名無しさん
2014/10/25(土) 13:54:53.53ID:awQCBO240889デフォルトの名無しさん
2014/10/25(土) 18:38:57.14ID:gTYzNJ95ID変わるまでは静かにしてるのかな。
0890デフォルトの名無しさん
2014/10/26(日) 21:08:46.13ID:fQkp4lJ2Sub test()
Dim pas As Variant
Worksheets("Sheet1").Select
pas = "C:\" & Range("b3").Value & ".xls"
ThisWorkbook.SaveAs Filename:=pas
End Sub
このようにセルの数字をファイル名にしたいのですがどのように書けば良いのでしょうか?
0892デフォルトの名無しさん
2014/10/26(日) 21:18:29.29ID:AOEKovwkそのように書けばいい
0893デフォルトの名無しさん
2014/10/26(日) 21:27:03.80ID:fQkp4lJ2あれ!!謎のErrorがでまくっていて困り果てた結果の質問でしたがExcelを立ち上げ直すと動くようになりました! ありがとうございました!!
0894デフォルトの名無しさん
2014/10/27(月) 08:41:33.76ID:vN2Fe9bLそもそも、EXCELでやることじゃない。
VBでもがんばって勉強しな
0895デフォルトの名無しさん
2014/10/27(月) 08:52:16.18ID:c92k51KDDim bingo(100, 12) As Byte
配列cardに全データを入れる
配列bingoの初期状態は0
穴が空いたら数字をマイナスにする
1個空けるごとに縦横斜めをチェック、リーチなら1、ビンゴなら2をbingoセットして音を出す
配列bingoにフラグをセットする時、すでに同じフラグが入っていたらスルー
0896デフォルトの名無しさん
2014/10/27(月) 12:28:04.21ID:jRiSofs8bingo(100, 12)
より、ユーザー定義型使って
card(100).grid(5, 5)
card(100).bingo(12)
ってした方が良くね?
With card(100)を使えば
.grid(5, 5)
.bingo(12)
で済むわけだし
あと、ビンゴフラグは、該当するものに+1していくようにすれば
4でリーチ、5でビンゴで、1個空けるごとに縦横斜めをチェックする必要は無いのでは?
フラグのインデックスを、横軸を上から1,2,3,4,5、縦軸を左から6,7,8,9,10、
右上がり軸を11、右下がり軸を12とすると、数字が該当した(穴を空けた)位置の行と列を使い、
bingo(行)に+1、.Bingo(列+5)に+1、行=列なら.Bingo(12)に+1、行+列=6なら.Bingo(11)に+1
ってするだけで、毎回、12軸*5マス=60箇所のマイナス値チェックは不要になるし
マイナス値チェックが不要って事は、「穴が空いたら数字をマイナスにする」って処理も無くせることになる
何か間違ってるかな?
0897デフォルトの名無しさん
2014/10/27(月) 13:35:04.51ID:0oi6tOMg> 何か間違ってるかな?
よそでやれ
0898デフォルトの名無しさん
2014/10/27(月) 14:52:22.59ID:C2Yey9HZIf Not (Selection.Cells.Find("うんこ") Is Nothing) Then
Selection.Cells.Find("うんこ").Interior.Color = vbUnkoColor
End If
のようにするよりは
tmpCell = Selection.Cells.Find("うんこ")
If Not (tmpCell Is Nothing) Then
tmpCell.Interior.Color = vbUnkoColor
End If
のほうが、Findの検索を2回じゃなく1回だけしかしないので高速などの理由で好ましいですか?
0899デフォルトの名無しさん
2014/10/27(月) 15:11:41.14ID:0oi6tOMg> 好ましいですか?
はい
0900デフォルトの名無しさん
2014/10/27(月) 15:57:16.12ID:C2Yey9HZその心は?
0901デフォルトの名無しさん
2014/10/27(月) 16:01:33.34ID:C2Yey9HZデフォルトでシート3つのままにしているやつがほとんどのため
シートが3つあった場合いちいち全部みて未使用を確認せねばならん。
なのでこんなツールつくってくれないか?
・あるフォルダ以下のすべてのExcelファイルを調べる
・未使用のシートがあればそれをシートごと削除する。
0902デフォルトの名無しさん
2014/10/27(月) 16:06:49.33ID:gYcrC5UIなんでいきなり悔しがってるの?
0903デフォルトの名無しさん
2014/10/27(月) 16:07:01.55ID:0oi6tOMg> その心は?
自分で書いてるじゃん
>>899
> Findの検索を2回じゃなく1回だけしかしないので高速などの理由
DRY
>>901
使ったシート名を変更させろよ
0904デフォルトの名無しさん
2014/10/27(月) 16:07:58.29ID:0oi6tOMg> なんでいきなり悔しがってるの?
悔しがってる?
VBAと関係ない話になってるので、よそでやれと言ったまで
0905デフォルトの名無しさん
2014/10/27(月) 16:13:12.80ID:C2Yey9HZDRYとは?
0906デフォルトの名無しさん
2014/10/27(月) 16:15:03.27ID:0oi6tOMgGoogleって知ってる?
https://www.google.co.jp/search?q=DRY&oq=DRY&aqs=chrome..69i57j69i61j69i60.912j0j7&sourceid=chrome&es_sm=122&ie=UTF-8
0907デフォルトの名無しさん
2014/10/27(月) 20:07:50.61ID:h7Lo5JhP> シートが3つあった場合いちいち全部みて未使用を確認せねばならん。
なんでそんなことしてるんだ?
上司からの指示?
なら、マクロ探すより次の仕事探した方がいいんじゃね?
0908デフォルトの名無しさん
2014/10/27(月) 20:15:33.52ID:gql5KgGqDRYがプログラム全般に通ずる話だがVBAにも無関係じゃないと言うなら、件の話も然り
0909デフォルトの名無しさん
2014/10/27(月) 21:26:29.93ID:KBeM+4NE当たり散らしてるだけ。気にする必要ない。
0910デフォルトの名無しさん
2014/10/28(火) 00:21:11.16ID:eZMhmcuaDim WSH, cmd, path, output As String
Set WSH = CreateObject("WScript.Shell")
path = """C:\Program Files\7-Zip\7z.exe"""
output = """C:\Program Files\7-Zip\output.txt"""
cmd = path & " > " & output
WSH.Run "%ComSpec% /c " & cmd
End Sub
プログラムをshell.runで実行して、結果をプログラムと同じ場所にをテキスト出力したいんですが
上記のプログラムですと、テキストすら作成されずエラーも出ません。
試しにcmdの中をコマンドプロンプトで実行すると上手くテキスト出力できました。
一体何が原因でどうすれば意図通りに出力できるでしょうか?
0911デフォルトの名無しさん
2014/10/28(火) 00:36:29.67ID:oItsuRwVRunメソッドが環境変数を展開するのかとか
環境変数はちゃんとセットされてるのかとか
そもそもコマンドプロンプト経由で呼び出す必要があるのかとか
出力先にアクセス権はあるのかとか
まあ、色々あるんだが、とりあえずWSHのスレ行って聞けと
0912デフォルトの名無しさん
2014/10/28(火) 10:04:31.28ID:/44LW0Xx> テンプレ厨が次スレもテンプレ縛り無しで先に立てられちゃったから苛立って
> 当たり散らしてるだけ。気にする必要ない。
まあどっちかというと、稚拙な日本語で稚拙なロジックを自慢そうに語ってたので、いらっとしたというのが正直なところ
0913デフォルトの名無しさん
2014/10/28(火) 11:55:40.06ID:9E+lxAmKすごい僻み根性だな
自分より劣ってると感じたら生暖かく見守ってりゃ良いのに。
せめて欠点を具体的に指摘して対案を提示するぐらいのことはやらないと
ただのやっかみだと思われても致し方ない。
0914デフォルトの名無しさん
2014/10/28(火) 12:15:37.35ID:EwPoWrGI本人は口先では否定するだろうけどw
0915デフォルトの名無しさん
2014/10/28(火) 12:57:55.14ID:/44LW0Xx0916デフォルトの名無しさん
2014/10/28(火) 13:05:30.07ID:9E+lxAmK同じことを何度も言わせるな
具体的に指摘できなければ他人にはお前の内心など伝わらない。
少なくとも俺には「目も当てられないほど」とか「稚拙」とかいう
その評価の根拠がわからない。
わからない以上、それまでのスレの流れも鑑みた上で
僻みとかやっかみがもとで発せられた言葉だろうと推測せざるを得ない。
0917デフォルトの名無しさん
2014/10/28(火) 13:24:15.47ID:/44LW0Xx> 少なくとも俺には「目も当てられないほど」とか「稚拙」とかいう
> その評価の根拠がわからない。
え、>>896がすばらしいと思ってるってこと?
なら、そう思ってればいいよ
0918デフォルトの名無しさん
2014/10/28(火) 13:25:23.39ID:/44LW0Xx0919デフォルトの名無しさん
2014/10/28(火) 13:29:19.49ID:/44LW0Xx>>896は計算量が>>895とそれほど変わらない
計算量を劇的に減らす手段がVBA(VB)にはあるのに
0920デフォルトの名無しさん
2014/10/28(火) 13:58:36.65ID:9E+lxAmKとりあえずその発言には明らかなロジックの誤りが存在している。
「目も当てられない」や「稚拙」の否定は「素晴らしい」ではない。
"> "の否定が "<" では無いのと同様、その中間も存在している。
>>918
タオパイパイの件について、個別に把握しては居ないけれど
それが根拠や改善策を伴う具体的な指摘であれば問題は無い。
そうでなければそれが正当な批判かどうかの判断は出来ない。
そして、その件と今回の件に関連も無い。
>>919
これで3回目の繰り返しになるけれど、
何を言おうが具体的に例示出来ないなら説得力は無い。
言うだけならSTAP細胞も反重力エンジンも有るっていえる。
0921デフォルトの名無しさん
2014/10/28(火) 14:26:22.57ID:nKCK5sDR0922デフォルトの名無しさん
2014/10/28(火) 14:40:41.77ID:52F6/qy8ワークブックを開くフォルダを絶対パスで指定したいのですが
上のコードの場合どう組み込めばいいですか?
0923デフォルトの名無しさん
2014/10/28(火) 15:24:41.22ID:9E+lxAmKRange("A" & g)の内容にパスを含めるか、
あるいはOpen と Range の間に"" でパスを書く。
その場合、パスの末尾の"\"と、その後(つまり Range の前)の "&" をお忘れなく
Workbooks.Open "ここにパスを書く(最後は \)" & Range("A" & g).Value & ".xls"
0924デフォルトの名無しさん
2014/10/28(火) 15:43:15.17ID:/44LW0Xx> 何を言おうが具体的に例示出来ないなら説得力は無い。
ヒント出してあげてるのに
0925デフォルトの名無しさん
2014/10/28(火) 16:02:10.40ID:52F6/qy8助かりましたありがとう!
0926デフォルトの名無しさん
2014/10/28(火) 16:12:18.82ID:9E+lxAmK別にこちらはコードが知りたいわけではない。
批判の論拠が有るかどうかを聞いているのだって
稚拙云々という発言の妥当性を証明する必要があるのは
君のほうであってこちらは別にどうでも良い。
証明できなければ君が僻み根性の持ち主であると評価され続けるだけの話。
ヒントがどうとかほざいた所でそんなものに説得力が無いのは明らか。
0927デフォルトの名無しさん
2014/10/28(火) 16:15:39.97ID:/44LW0Xx> 稚拙云々という発言の妥当性を証明する必要があるのは
要するに、稚拙かどうかを判断する能力が君にはないわけだ
0928デフォルトの名無しさん
2014/10/28(火) 16:19:05.37ID:/44LW0Xxわけわからん
0929デフォルトの名無しさん
2014/10/28(火) 16:29:32.84ID:EwPoWrGI自分を誤魔化し、周りに印象操作するために、いろんな詭弁を並べなくちゃならなくて大変だねぇ
0930デフォルトの名無しさん
2014/10/28(火) 16:31:02.52ID:9E+lxAmKあたりまえだ。
根拠が無いものを判断することなど誰にも出来ない。
もちろん君にも出来ない。
>>928
ひとまずは>>909で良いんじゃないの?
それで苛立ってスレを楽しんでるように見える人達に噛み付いてる。
という流れ。
もちろん否定するのは自由だけれど、
コードの稚拙さを論拠にした以上はその根拠を詳らかにしなければ
それは単に否定の発言をしたというに過ぎず有効な反論とは呼べない。
0931デフォルトの名無しさん
2014/10/28(火) 16:34:43.06ID:/44LW0Xx> コードの稚拙さを論拠にした以上はその根拠を詳らかにしなければ
コードが稚拙だと言った覚えはないが
・日本語が稚拙
・VBA関係ない
とは言ったが
0932デフォルトの名無しさん
2014/10/28(火) 16:45:49.93ID:nKCK5sDR0933デフォルトの名無しさん
2014/10/28(火) 17:07:42.06ID:9E+lxAmK>稚拙な日本語で稚拙なロジックを自慢そうに語ってたので、いらっとしたというのが正直なところ
「稚拙なロジックを」というのはコードのことではないのか?
「稚拙な日本語」と対になっている以上、コードの事を指していると判断するのが
「稚拙ではない日本語のロジック」なのだが。
0934デフォルトの名無しさん
2014/10/28(火) 17:17:01.42ID:/44LW0Xxうーん、プログラマじゃない人と話してる気がする
> >>931
> 「稚拙なロジックを」というのはコードのことではないのか?
>>896には多少のコード(前半)が書かれてるが、俺が稚拙なロジックと言ったのはそこじゃないよ
ここ
> あと、ビンゴフラグは、該当するものに+1していくようにすれば
> 4でリーチ、5でビンゴで、1個空けるごとに縦横斜めをチェックする必要は無いのでは?
0935デフォルトの名無しさん
2014/10/28(火) 17:47:02.97ID:oItsuRwVお前らの下らん言い争いはどうでもいいが
> あと、ビンゴフラグは、該当するものに+1していくようにすれば
> 4でリーチ、5でビンゴで、1個空けるごとに縦横斜めをチェックする必要は無いのでは?
これを稚拙という、VBAにそなえられている「計算量を劇的に減らす」手段ってのには興味がある
0936デフォルトの名無しさん
2014/10/28(火) 17:52:24.93ID:9E+lxAmK改めて>>896を読んだのだが
たしかにコードそのものではなくアルゴリズムが書いてあった。
その点はきちんと確認しなかったこちらの誤りだったと認めよう。
ただし、そうであっても
根拠無き批判は批判とは呼べないという結論は変わらない。
プログラマ云々はこれまた印象操作というか、
問題の本質とは関係ない話だと思うのだが、
それと結論とになにか関連は有るのか?
もし仮にプログラマであれば自分に同意するはずだという意味なら
それはやはり間違っていると言わざるを得ないが
どっち道間違ってるのは確定事項なのわけで
正直これ以上論ずる意味を感じない。
0937デフォルトの名無しさん
2014/10/28(火) 18:03:10.53ID:/44LW0Xx> プログラマ云々はこれまた印象操作というか、
> 問題の本質とは関係ない話だと思うのだが、
> それと結論とになにか関連は有るのか?
コードに対する批判とロジックに対する評価は全く別物。それを混同していると見えたので、プログラマじゃないのかと
> 正直これ以上論ずる意味を感じない。
俺も賛成
>>835
> VBAにそなえられている「計算量を劇的に減らす」手段ってのには興味がある
00〜99の数字からカードNo・カード上の位置への逆インデックスをDictionaryを使って構築すれば、数字探索O(N)からO(1)に減らせる
ただし、bingoフラグをも使わないベタ実装でも、一瞬で処理が終わると思われるので、計算量の削減に実利があるとは思えない
あるいは、メモリ上のデータ構造を使わずに、シート上にビンゴカードを展開して、range.findを使うとかね。Excelらしいし
0938デフォルトの名無しさん
2014/10/28(火) 18:11:38.36ID:MxSJLzYv下5ビットが全部1、つまり16進で&h1Fになったらビンゴ
まあ+1してって4でリーチ、5でビンゴにした方が計算量は少ないよな
ビット単位だとリーチの判定が面倒だし
別の案として、カードデータをワークシートに全部並べる
ガラポンを1個引くごとに該当の数字を0に一括置換
作業列にSUM関数やIF関数を置いて、ビンゴもリーチもFINDで一発
0939デフォルトの名無しさん
2014/10/28(火) 18:13:36.82ID:MxSJLzYv0940デフォルトの名無しさん
2014/10/28(火) 18:28:55.86ID:/44LW0Xx> 00〜99の数字からカードNo・カード上の位置への逆インデックスをDictionaryを使って構築すれば、数字探索O(N)からO(1)に減らせる
> ただし、bingoフラグをも使わないベタ実装でも、一瞬で処理が終わると思われるので、計算量の削減に実利があるとは思えない
あ、ごめん、Dictionaryなんか使う必要全然なかったわ
文字列の配列でOKだね
テへ
0941デフォルトの名無しさん
2014/10/28(火) 18:30:45.57ID:oItsuRwVDictionaryはWSHの機能で、VBの機能でもVBAの機能でもないってのはまあおいといて
>>896は数字探索のコストについては言及していない
数字探索の回数がさがると言う>>896の意見は間違ってない
数字探索のコストまで意識が及ばないのを稚拙というなら、そこをちゃんと指摘してから言えよと
ただ、別のアルゴリズムでの処理オーダーがO(n)とO(1)だったとしても、どっちが早いかなんて比較できんぞ
あくまで件数に対する処理時間の割合なんだから。順次検索2.5回がハッシュ値計算より遅いとは言い切れん
あとWSHのDictionaryだけど、これほんとに(ほぼ)O(1)で探索するか?
まえに見たどっかのテストだとそうなってなかったぞ
Dictionaryはハッシュテーブルで実装されてると言うお前の思い込みじゃないのか
>ベタ実装でも、一瞬で処理が終わると思われるので、計算量の削減に実利があるとは思えない
実利のないことをつついて稚拙とか言ってたのか
僻みといは言わんが、良い性格だとは思われんわな、そりゃ
0942デフォルトの名無しさん
2014/10/28(火) 19:58:32.75ID:xSrXocoZそういう方向では十分に意味があり有意義な意見だと思う
少なくとも、具体的な指摘も出来ずに否定してる奴の方が稚拙であることは間違いない
0943デフォルトの名無しさん
2014/10/28(火) 20:25:16.29ID:FB7I10mJだいじょうぶ おれは見てる だいじょうぶ、がんがれ だいじょうぶ 推敲してから書き込んだだけおまえのがエラい ・・・たぶん
0944デフォルトの名無しさん
2014/10/28(火) 21:53:38.37ID:s98vcxYOさんざん出し惜しみした計算量を劇的に減らす手法...
よく恥ずかしげもなく出したな w
0945デフォルトの名無しさん
2014/10/28(火) 22:19:56.41ID:xhc5AVYv0946デフォルトの名無しさん
2014/10/28(火) 22:53:10.27ID:8+H+l7VA0947デフォルトの名無しさん
2014/10/28(火) 23:58:38.82ID:X1q00OrQ0948デフォルトの名無しさん
2014/10/29(水) 00:06:29.70ID:gNEeZJqJ今度ぷよぷよの作り方丸投げしようと思ってるんだからさ。
0949デフォルトの名無しさん
2014/10/29(水) 04:47:20.07ID:L5pJvKJrhttp://1st.geocities.jp/mattulwan1/puyo/
0950デフォルトの名無しさん
2014/10/29(水) 10:14:19.12ID:MH1nCRLQしょうがないから説明するよ
まず、毎回穴の数をカウントし直すベタ実装は以下
'配列は1 originで使う
dim hole(5, 5) as integer
digitFound = False
for i = 1 to 5
for j = 1 to 5
if digit(i, j) = targetDigit then
goTo exit_loop
end if
next
next
exit_loop:
if digitFound then
hole(i, j) = 1
tatecount = hole(i, 1) + hole(i, 2) + hole(i, 3) + hole(i, 4) + hole(i, 5)
yokocount = hole(1, j) + hole(2, j) + hole(3, j) + hole(4, j) + hole(5, j)
naname1count = hole(1, 1) + hole(2, 2) + hole(3, 3) + hole(4, 4) + hole(5, 5)
naname2count = hole(1, 5) + hole(2, 4) + hole(3, 3) + hole(4, 2) + hole(5, 1)
end sub
if tatecount = 4 or yokocount = 4 or naname1count = 4 or naname2count = 4 then
'リーチ
elseif tatecount = 4 or yokocount = 5 or naname1count = 5 or naname2count = 5 then
'bingo
end if
(続く)
0951デフォルトの名無しさん
2014/10/29(水) 10:21:31.08ID:MH1nCRLQさて、このベタ実装に複雑さを持ち込むにはなんらかの理由が必要
・複雑さと引き替えに速度を得る(処理時間がボトルネックになる場合。qsortとかキャッシュとか)
・評価を遅延させるコードを追加することによって、全体の処理量を減らす
・コードは長くなるが、それは複雑な問題を簡単に分割した結果で、全体としてのシンプルさが上がる
・複雑さと引き替えにメンテナンス性をあげることができる(Strategyパターンを用いてOCP原則を担保する)
・複雑さと引き替えにテスト容易性をあげることができる(DIパターンとか)
>>962のロジックにはなにかメリットがあるか?
とくに何のメリットもないし、逆にベタ実装よりわかりづらくなってる
しかも、穴あき状態を保存してくていいという主張なんだが、まあ普通のプログラマなら穴あき状態くらいは保存しとくもんだろう
という理由で「稚拙なロジック」と評価した
俺からは以上です
0952デフォルトの名無しさん
2014/10/29(水) 10:22:12.34ID:MH1nCRLQようするに、KISSの原則ってことね
0953デフォルトの名無しさん
2014/10/29(水) 10:24:08.85ID:MH1nCRLQ>>950のコードでgoto使うなとかcount合計のとこループしろとかあるかもしれないけど、それは本質的な問題じゃないからいいよねってことで
0954デフォルトの名無しさん
2014/10/29(水) 10:33:45.57ID:MH1nCRLQ>>941
> 数字探索の回数がさがると言う>>896の意見は間違ってない
> 数字探索のコストまで意識が及ばないのを稚拙というなら、そこをちゃんと指摘してから言えよと
> ただ、別のアルゴリズムでの処理オーダーがO(n)とO(1)だったとしても、どっちが早いかなんて比較できんぞ
> あくまで件数に対する処理時間の割合なんだから。順次検索2.5回がハッシュ値計算より遅いとは言い切れん
これにだけコメントしておく
「数字探索」というのは、ビンゴマシンがはき出した数字が各カード上に存在するかを調べること
最悪2500回の比較が必要。つまりO(N)
これを(dictionary関係なく)インデックスを作っておけば、数字探索はO(1)になるという意味
まあ毎回最悪2500回かかっても処理量的にはたいしたことないので、インデックスなんか作る必要ないんだが
0955デフォルトの名無しさん
2014/10/29(水) 10:48:44.56ID:TQjXHOq7・どういうときにVariantが便利なの?
・Split関数とかArray関数とどのように関連があるの?
・動的配列は最初に要素数を書かないけど、使うときは結局はReDimで指定しないといけないのは、結局自由には使えないってこと?
・配列全体をあらわすときとか、()を使わない使用方法もあるけど、それはどんなときに使うの?
などのような高度な使い方はさっぱりわからない。
0956デフォルトの名無しさん
2014/10/29(水) 11:14:52.43ID:czOj3axe負け犬の遠吠えどころか、負け犬の小便程度だな
0957デフォルトの名無しさん
2014/10/29(水) 11:42:51.96ID:TQjXHOq70958デフォルトの名無しさん
2014/10/29(水) 11:47:48.79ID:MH1nCRLQつまり、その程度のこともわからず、根拠根拠しかいえない奴ばっかだったってことですよ
0959デフォルトの名無しさん
2014/10/29(水) 11:49:53.60ID:TQjXHOq7Sub Test1()
Dim a() As String
a() = Array("A", "B", "C", "D", "E")
End Sub
Sub Test2()
Dim a(5) As String
a() = Array("A", "B", "C", "D", "E")
End Sub
Sub Test3()
Dim a(5) As String
a = Array("A", "B", "C", "D", "E")
End Sub
0960デフォルトの名無しさん
2014/10/29(水) 11:52:11.19ID:TQjXHOq7Sub Test4()
Dim a As Variant
a() = Array("A", "B", "C", "D", "E")
End Sub
Sub Test5()
Dim a As String
a = Array("A", "B", "C", "D", "E")
End Sub
Sub Test6()
Dim a As Variant
a = Array("A", "B", "C", "D", "E")
End Sub
みんな使い方はどうやって覚えてる?
0961デフォルトの名無しさん
2014/10/29(水) 11:53:46.60ID:MH1nCRLQそういう言語仕様だから、言語ごとに使える方法を覚えるしかないよ
0962デフォルトの名無しさん
2014/10/29(水) 11:56:22.95ID:TQjXHOq7Sub Test7()
Dim a As Variant
a = Selection
Debug.Print a(2, 2)
End Sub
Sub Test8()
Dim a As Variant
Set a = Selection
Debug.Print a(2, 2)
End Sub
0963デフォルトの名無しさん
2014/10/29(水) 12:01:08.23ID:TQjXHOq7「配列はすべてVariantしか使わない」ことにしたらすべて解決?
0964デフォルトの名無しさん
2014/10/29(水) 12:35:57.11ID:sGjc0oQu> '配列は1 originで使う
だせーコメント、下限の指定のやり方も知らんのかよ w
0965デフォルトの名無しさん
2014/10/29(水) 12:49:22.07ID:sGjc0oQuたまたま結果が同じになってるだけ
Test7 の方は選択されてる領域の値が配列としてコピーされる
Test8 の方は Range オブジェクトが入る
なので、Test8 の方なら、セルの値を変更したりもできる
その代わり遅いけど
とりあえず Debug.Print TypeName(a) ってやってみれ
0966デフォルトの名無しさん
2014/10/29(水) 19:37:23.42ID:WgixnIhX0967デフォルトの名無しさん
2014/10/30(木) 00:13:59.87ID:QKQcea/5Os Win7 32bit Excel2013
Declare Function GetKeyboardLayout Lib "user32" (ByVal dwLayout As Long) As Long
Declare Function ImmRegisterWord Lib "imm32.dll" Alias "ImmRegisterWordA" (ByVal hKL As Long, ByVal lpszReading As String, ByVal dwStyle As Long, ByVal lpszRegister As String) As Long
Dim hKL As Long
Dim rc As Long
hKL = GetKeyboardLayout(0)
rc = ImmRegisterWord(hKL, "ぱ", 1, "ぱぱぱ")
とやっても必ず0が帰ってくる
dwStyleが1なのがまずいかと思ってループで0〜10万まで突っ込んでみても成功できなかった
IME2010でもimm32.dllで単語登録は可能?
2003以降ImmGetRegisterWordStyleが使用できなくなってうんたら以外の情報が見つからなかったのでわかる人教えてほしい
0968デフォルトの名無しさん
2014/10/30(木) 00:23:04.46ID:kPIxDZa1Workbooks.Saveasの保存のコードのところでエラーが出るんだけど
これはどう回避したらいいですか?
0969デフォルトの名無しさん
2014/10/30(木) 06:11:12.95ID:MaVmo7Mi0970デフォルトの名無しさん
2014/10/30(木) 08:03:42.49ID:kPIxDZa1あほ
0971デフォルトの名無しさん
2014/10/30(木) 08:04:45.59ID:kPIxDZa10972デフォルトの名無しさん
2014/10/30(木) 08:35:22.52ID:MQMCTKm/「APIを使ってのIMEへの単語登録」は、ExcelにもVBAにも関係ないので
君がそれを実現するための言語としてVBAを選択したところで、ここではスレ違いです
>>968
SaveAsには複数の引数(オプション設定)があるので
具体的にどういうコードを書いて、何というエラーが出てるか書かなかったら
>>969のように小馬鹿にされても自業自得だ
初心者はエラー文見ても意味不明かもだけど、エラー文にも原因や回避策を探るヒントが
含まれていることが多いし、Ctrl+Cでエラー文のコピーも出来るから、コードと併せて
エラー本文はそのまま貼ろう
0973デフォルトの名無しさん
2014/10/30(木) 10:34:53.35ID:XcOLvYSq> 「APIを使ってのIMEへの単語登録」は、ExcelにもVBAにも関係ないので
> 君がそれを実現するための言語としてVBAを選択したところで、ここではスレ違いです
VB6も死滅したし、これくらい許容しては?
0974デフォルトの名無しさん
2014/10/30(木) 11:46:12.33ID:7fc6WtHX原因はわからないけど GetKeyboardLayout(0) の戻り値がおかしくなっているみたい。
C++ で同じようにすると、ImmRegisterWord( ) から 1 が返ってきて、正しく登録できる。
で、hKL の値を見てみると、VBA は &h04110444 で C++ は 0xe0200411 になってる。
ものは試しで、直接
rc = ImmRegisterWord(&he0200411, "ぱ", 1, "ぱぱぱ")
ってやると、ちゃんと登録できる。
とりあえず、今わかったのはここまで。
0975デフォルトの名無しさん
2014/10/30(木) 11:56:05.99ID:ZYKcu7qA俺もスレ違い云々を厳格に適用するのは反対なんだけど、
ここよりも適切なスレがあるから>>967には
そちらに移動してもらったほうが良いんじゃないかとも思う。
VBAなんでも質問スレ
http://peace.2ch.net/test/read.cgi/tech/1342087380/l50
回答するには「答える能力」と「答える意欲」の両方が必要なわけで
答える能力があってもスレ違いを理由に答える意欲が無い人は
ここで何時まで待っていたって答えてくれない。
もしも>>972がここで答える気が無くても答える能力のある人なら
あっちでなら答えてくれると思うよ。
答える能力も意欲も無い人かもしれないけど。
ちなみに俺には答える能力のほうが無い人です。
0976デフォルトの名無しさん
2014/10/30(木) 18:06:11.41ID:XcOLvYSq> もしも>>972がここで答える気が無くても答える能力のある人なら
> あっちでなら答えてくれると思うよ。
ないな。
0977デフォルトの名無しさん
2014/10/31(金) 00:07:20.42ID:rh+3Znhq引数が配列変数、返り値も配列変数、ってできますか?
0978デフォルトの名無しさん
2014/10/31(金) 00:24:43.50ID:IA3p3mfx配列変数って、配列を受け渡ししたいってこと?
できるけど、Variantでやった方が楽じゃないかな
0979デフォルトの名無しさん
2014/10/31(金) 00:38:34.53ID:rh+3Znhqそのとおり。
例えば文字列配列を渡して、もし重複したダブリあればそれを削除して
要素数がそれだけ少なくなった配列をまた1から順番に詰めて返り値にする関数です。
そしよければそんな関数を作ってコードを教えていただけませんか?
0980デフォルトの名無しさん
2014/10/31(金) 01:58:28.21ID:IA3p3mfx自分で作れ
0981デフォルトの名無しさん
2014/10/31(金) 03:43:27.37ID:pcLUUbEh面倒だからコードも書かないし雑にぱっと考えついた方法だけ書くと
配列から順番に値を取得してディクショナリのキーに設定。ディクショナリに同じキーが有った場合は設定しないで
配列の最後まで繰り返す。
ディクショナリのキーを配列に設定して、余った分の要素は削るか初期値を設定しておしまい。
って言うか配列じゃなければダメなの?最初からディクショナリなら
わざわざ配列から値を取得したり詰め替えたりする必要ないんだけど。
0982デフォルトの名無しさん
2014/10/31(金) 05:20:59.43ID:mpqowuw20983デフォルトの名無しさん
2014/10/31(金) 06:38:00.74ID:wcUdaFCAこのネタ(配列中の重複削除)少なくとも3回目
前回も前々回もディクショナリーとかコレクションとかを使えとアドバイスされたのに
その後音沙汰なし
0984デフォルトの名無しさん
2014/10/31(金) 09:04:30.71ID:rh+3Znhqどうもですぅ。やってみますぅ。
>>983
このネタというふうにあなたはおっしゃったけれども、私は自分でオリジナルの質問をすることが出来るんです。
その人とは違うんです。
0985デフォルトの名無しさん
2014/10/31(金) 09:05:14.54ID:rh+3Znhqディクショナリーとか使い方がさっぱりわからん。
0986デフォルトの名無しさん
2014/10/31(金) 09:19:19.57ID:wcUdaFCA>>237-257
この辺読め、これがたぶん二回目のやつ(コレクション使うパターン)だ
一回目は前スレかそれ以前だが探すのが面倒なので自力でぐぐってくれ
たしかディレクトリーつかう解決法だったはずだ
0987986
2014/10/31(金) 09:21:09.09ID:wcUdaFCAディクショナリーの間違いだ。
0988デフォルトの名無しさん
2014/10/31(金) 09:23:56.82ID:rh+3Znhqあと先人のソートもできるならやってから配列に入れたいな。
どうすればいいんだろう?
0989デフォルトの名無しさん
2014/10/31(金) 10:33:35.56ID:rh+3Znhq重複を避けるために
Collectionの引数Keyを用いてそこでエラーなら重複とみなし処理をしないなんで。
ON ERROR使わないといけないじゃん。
こんなんオレのプログラミング哲学が許さない。
0990デフォルトの名無しさん
2014/10/31(金) 10:50:24.00ID:rh+3ZnhqExcel本体のソート機能を呼び出すことはできないのですか?
無理やりコードで作業シートをつくりそこにデータを入力してSortメソッドを使うダサイ方法じゃなく。
0991デフォルトの名無しさん
2014/10/31(金) 11:02:24.57ID:Ff8njc41Collectionはエラーが出るか否かでしか重複を検知できないが
DictionaryならExistsでキーが既に存在するかを確認できる
そしてSortedListなら、Containsでキーが既に存在するかを確認できる上に
自動的にソートもされる
0992デフォルトの名無しさん
2014/10/31(金) 11:11:16.29ID:ZzQYNmVsゲラゲラゲラ
0993デフォルトの名無しさん
2014/10/31(金) 11:15:34.57ID:rh+3Znhqなるほどありがとうございます。
ここを見ただけですが、かなり便利で使えそうな気がします。
http://www.eurus.dti.ne.jp/~yoneyama/Excel/vba/vba_sortedlist.html
ところでそんな貴重な情報、どこで仕入れてきているのでしょうか?
SortedListとかCollectionとか町の本屋のパソコンコーナーにあるVBA本には絶対に載ってないですし(まあほとんど入門書ですが)。
0994デフォルトの名無しさん
2014/10/31(金) 11:36:17.53ID:6O2gHEcSVBAで.NETのクラスを使えることを書いてる書籍が皆無だとは思わんが・・・
ともあれ、.NETのクラスを使えることがわかったんだから、次は.NETのクラスを勉強すればいいね。
0995デフォルトの名無しさん
2014/10/31(金) 11:54:29.74ID:rh+3Znhqそうだったのですか
勉強してみます
スレも最後だから白状しよう。
オレは237です(爆)
0996デフォルトの名無しさん
2014/10/31(金) 12:15:53.17ID:Ff8njc41「VBA ソート 重複」で検索して、2件目がそのサイトなんだが・・・
>>995
=237なのは解ってたから、既出で237が不満そうな方法ではなく
今までに出てない方法を紹介したわけだが・・・
0997デフォルトの名無しさん
2014/10/31(金) 13:50:41.56ID:EwB3SceG実は俺も237なんだ
0998デフォルトの名無しさん
2014/10/31(金) 15:29:57.55ID:IA3p3mfx0999デフォルトの名無しさん
2014/10/31(金) 15:35:33.54ID:6O2gHEcSExcel VBAから簡単に使えて、しかも余分なコードなしに目的が達成できるものがあるなら、
そっち使えばいいと俺は思うよ。
Dictionaryもそうだし、FileSystemObjectやRegExpもそう。
1000デフォルトの名無しさん
2014/10/31(金) 15:49:28.23ID:Ff8njc41弊害がなければ、ね
10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。