Excel VBA 質問スレ Part23
レス数が1000を超えています。これ以上書き込みはできません。
0001既定のプロパティさん
2012/01/29(日) 00:05:13.1602 http://pc11.2ch.net/test/read.cgi/tech/1168308855/
03 http://pc11.2ch.net/test/read.cgi/tech/1180192018/
04 http://pc11.2ch.net/test/read.cgi/tech/1189814602/
05 http://pc11.2ch.net/test/read.cgi/tech/1197448064/
06 http://pc11.2ch.net/test/read.cgi/tech/1205231499/
07 http://pc11.2ch.net/test/read.cgi/tech/1212587819/
08 http://pc11.2ch.net/test/read.cgi/tech/1219673793/
09 http://pc11.2ch.net/test/read.cgi/tech/1228372971/
10 http://pc12.2ch.net/test/read.cgi/tech/1235332603/
11 http://pc12.2ch.net/test/read.cgi/tech/1241885130/
12 http://pc12.2ch.net/test/read.cgi/tech/1247566074/
13 http://pc12.2ch.net/test/read.cgi/tech/1254281104/
14 http://pc12.2ch.net/test/read.cgi/tech/1262748898/
15 http://pc12.2ch.net/test/read.cgi/tech/1271261239/
16 http://hibari.2ch.net/test/read.cgi/tech/1280045912/
17 http://hibari.2ch.net/test/read.cgi/tech/1289182437/
18 http://hibari.2ch.net/test/read.cgi/tech/1298240666/
19 http://hibari.2ch.net/test/read.cgi/tech/1305754555/
20 http://hibari.2ch.net/test/read.cgi/tech/1312435844/
21 http://hibari.2ch.net/test/read.cgi/tech/1316931607/
前スレ:
Excel VBA 質問スレ Part22
http://toro.2ch.net/test/read.cgi/tech/1322400978/
0002既定のプロパティさん
2012/01/29(日) 00:06:07.26★1 質問テンプレ(雛形)は用意しませんが、OSとExcelのバージョンは必ず書きましょう。
★2 ExcelのVBA以外の部分に関する質問はNGです。
但し、VBA無しでも出来ることだが、あえてVBAでやりたいって物に関してはOK。
★3 ExcelのVBE(Visual Basic Editor)を使うとしても、VBAの分野以外に関してはスレ違いです。
VBAとは、『Visual Basic for Application』の略で
Application
├Workbooks
|└Workbook
| ├Worksheets
| |└Worksheet
というApplication以下のオブジェクトを、VB言語で操作するものを指します。
例えExcel付属のVBE(Visual Basic Editor)を利用しようとも、このApplication以下のブックやシート、
セルやオブジェクト等を操作するもの以外はVBA分野の話ではないので、ここでは聞かないでください。
★4 とりあえず、Excelのインスタンスを作らずにVB6で出来ることは全てスレ違いだと思ってください。
★5 レベルはどうあれ、ここはプログラマ用の板スレです。プログラマとは、自分でプログラムを組み、
コードを書く人の事なので、自分でやるきは全く無く、丸投げしようって人はお断りです。
ヒントを貰えばあとは自力でなんとかしますって人のみどうぞ。
★6 わからなければとりあえず「マクロの記録」(Alt, T, M, R)
0003デフォルトの名無しさん
2012/01/29(日) 11:38:40.690004デフォルトの名無しさん
2012/01/29(日) 12:22:48.13それにしても前スレ最後の方ときたら次スレ案内どころか、くだらない喧嘩でスレを埋め尽くすんだから、
やっぱVBAは厨房言語と言われても仕方が無いほどの民度の低さを実感する
0005デフォルトの名無しさん
2012/01/29(日) 12:44:37.54そんなに悔しかったのか?
0006デフォルトの名無しさん
2012/01/29(日) 12:48:28.90>>4
何で蒸し返すかなぁ・・・
そういうのが呼び水になるんだって気付けよ
0007デフォルトの名無しさん
2012/01/29(日) 14:34:17.40お前も同罪
0008デフォルトの名無しさん
2012/01/29(日) 15:20:07.91それはむしろ>>5だろ
0009デフォルトの名無しさん
2012/01/29(日) 16:12:08.400010デフォルトの名無しさん
2012/01/29(日) 19:23:14.35フォームに名前、番号、部署を入力して、登録ボタンをクリック。
A2に値が入っていない場合はその列に項目を追加。
もし入っているならば、次の行へ移動してもう一度条件分岐開始。
というプログラムをつくろうと思ったのですがうまくいきません。
どこがおかしいのでしょうか。初歩的な内容ですがヒントください。
Private Sub 登録_Click()
If TextBox1 = "" Then
MsgBox ("名前が記入されてない")
ElseIf TextBox2 = "" Then
MsgBox ("番号が記入されてない")
ElseIf TextBox3 = "" Then
MsgBox ("部署が記入されてない")
Else
Cells(2, 1).Select
Do While ActiveCell Like ""
ActiveCell.Offset(1, 0).Select
Loop
ActiveCell = TextBox1.Value
ActiveCell.Offset(0, 1) = TextBox2.Value
ActiveCell.Offset(0, 2) = TextBox3.Value
Me.Hide
End If
0011デフォルトの名無しさん
2012/01/29(日) 19:54:35.81>>5
0012デフォルトの名無しさん
2012/01/29(日) 19:54:59.15> Do While ActiveCell Like ""
ここ
「もし入っているならば」になってない
0013デフォルトの名無しさん
2012/01/29(日) 19:56:31.43いろいろ突っ込み所満載だが
とりあえずWhileをUntilにすれば問題は解決すると思う
0014デフォルトの名無しさん
2012/01/29(日) 19:59:04.90>>5
0015デフォルトの名無しさん
2012/01/29(日) 20:03:30.240017デフォルトの名無しさん
2012/01/29(日) 20:09:04.16ほんともういい加減にしてくれない?
大概うざいんですけど。
0018デフォルトの名無しさん
2012/01/29(日) 20:15:05.89Do While 〜、Do Until 〜、Loop While 〜、Loop Until 〜
は一切使わない
必ず
Do
If 〜 Then Exit Do
Loop
を使う
While & Untilで出来ることは全て出来る
While & Untilには出来ないことも出来る
わかりやすい
修正しやすい
条件内容によっては速い
良いことずくめ
0019デフォルトの名無しさん
2012/01/29(日) 20:19:48.99好きにしたらええがな
0020デフォルトの名無しさん
2012/01/29(日) 20:22:43.73これ詳しく教えてください。
どういうときに速くできるのですか?
0021デフォルトの名無しさん
2012/01/29(日) 20:22:54.82つい数レス前の質問で間違いがあった部分の話題じゃん。
もしかして前スレからの下劣なケンカにご執心で
それ以外の質問回答とか目に入ってないのか?
0022デフォルトの名無しさん
2012/01/29(日) 20:27:46.68いや、質問の内容と一切関係ない話だろ
コーディングスタイルの話なんか不毛だし荒れるだけ
0024デフォルトの名無しさん
2012/01/29(日) 20:50:18.21同じく初心者としては興味ある
DOとLOOPの2つと
それにwhileかuntilのどちらかの3つがセットなのかと思ったんだけど違うのか
0025デフォルトの名無しさん
2012/01/29(日) 20:57:42.84002620
2012/01/29(日) 21:03:22.50Do Loop だけで成立しますよ。
ただ、そのままだと無限ループなので何らかの脱出条件は必要ですから
通常はおっしゃるとおりにUntilやWhileを組み合わせる訳ですよね。
で、>>18さんはIf文で脱出条件を設定することを推奨されていて、
私はその手法自体は知ってたのですが、
そのほうが速くなる状況というのが分からないのでぜひ知りたいと思いました。
0027デフォルトの名無しさん
2012/01/29(日) 21:13:22.59Exit Doするコードを書くほうが良い、ってことじゃね?
機械的に適用するのは頭が固すぎると思うが。
0028デフォルトの名無しさん
2012/01/29(日) 21:19:41.12DO ifで書きなおして無事動きました。
確かにこっちのほうがわかりやすい気がします!
ありがとうです!
0029デフォルトの名無しさん
2012/01/29(日) 21:24:42.27For Next なら Exit For だな
明示しておけば(自分にとって)判りやすいという理由だけど
003020
2012/01/29(日) 21:26:33.22それって速度は変わらなくないですか?
自分でちょっと考えたのは脱出条件でAndを使うときに
UntilやWhileだとAndしかだめだけどIf文だとIfのネストで書けるから
(本当にほんのちょっとだけ)速く出来るかも、ということです。
003120
2012/01/29(日) 21:32:26.12ドッカン
m ドッカン
=====) )) ☆
∧_∧ | | / / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
( )| |_____ ∧_∧ < おらっ!出てこい>>18
「 ⌒ ̄ | | || (´Д` ) \___________
| /  ̄ | |/ 「 \
| | | | || || /\\
| | | | | へ//| | | |
| | | ロ|ロ |/,へ \| | | |
| ∧ | | | |/ \ / ( )
| | | |〈 | | | |
/ / / / | / | 〈| | |
/ / / / | | || | |
/ / / / =-----=-------- | |
0033デフォルトの名無しさん
2012/01/29(日) 22:09:06.08>明示しておけば(自分にとって)判りやすいという理由だけど
意味がわからん。
Do While 〜 Loop も Do ... Loop Until 〜 も、「〜」で充分明示的だと思うが。
まあ、ループ中で読み込みとかの処理をして、EOF ならぬけて、そうでなければ
読み込んだデータの処理をして最初に戻ると言うような処理は、それなりにあるから
Do: ... : If 〜 Then Exit Do: ... : Loop も使うけど、それに限定するのは >>27 の
言うようにちょっと頭固すぎと思う。
0034デフォルトの名無しさん
2012/01/29(日) 22:49:12.41でも>>29は同じ条件判断を2箇所に書く(2回やる)ってことでしょ? それはないわー。
0035デフォルトの名無しさん
2012/01/29(日) 23:20:23.79ActiveSheet.ShowDataForm
マジオススメ
0036デフォルトの名無しさん
2012/01/29(日) 23:57:52.46>でも>>29は同じ条件判断を2箇所に書く(2回やる)ってことでしょ? それはないわー。
さすがにそれはないと思うが...、修正面倒だし、
そもそも他人が見たときヘタすると意図汲み取れないと思う。
0037デフォルトの名無しさん
2012/01/30(月) 00:27:10.99使ってみたのですが、よく意味がわかりません。
起動時にフォーム呼び出しっぽいのですが、何もおこらないのですが
どういう効果があるのですか?
0038デフォルトの名無しさん
2012/01/30(月) 06:53:15.42聞く前にググれ
0039デフォルトの名無しさん
2012/01/31(火) 03:33:06.650040デフォルトの名無しさん
2012/01/31(火) 22:37:41.24.OnAction で文字列を使うときにはどうすれば良いのでしょうか?
例えば、キー "foo" を持つ "dic" というディクショナリを引数とする関数を
.OnAction に指定したい場合、
Sub Menu()
Dim CB
Set CB = Application.CommandBars("Cell").Controls.Add()
With CB
.Caption = "テスト"
.OnAction = "'testfunc dic(""foo"")'"
End With
End Sub
のようにしてもうまく動きません。
仕方が無いので、
val = dic("foo")
.OnAction = "'testfunc " & val & "'"
のように対処しています。
よろしくお願いします。
0041デフォルトの名無しさん
2012/02/01(水) 07:37:32.24dicが見えていないって事なんじゃないか?
0042デフォルトの名無しさん
2012/02/01(水) 07:58:29.15式は評価しないんだろ
0043デフォルトの名無しさん
2012/02/01(水) 22:04:08.030044デフォルトの名無しさん
2012/02/01(水) 22:12:34.88> val = dic("foo")
> .OnAction = "'testfunc " & val & "'"
これで対処できるって事は
.OnAction = "'testfunc " & dic("foo") & "'"
で済む話のような気もするが…まさかな
0045デフォルトの名無しさん
2012/02/01(水) 22:22:00.230046デフォルトの名無しさん
2012/02/01(水) 22:22:58.83評価されるよ
0047デフォルトの名無しさん
2012/02/02(木) 03:05:03.67OnActionに式が設定されて評価されてるわけではないと思うが
0048デフォルトの名無しさん
2012/02/02(木) 06:49:11.59このレベルのことで意見割れるとかあり得ねぇw
0049デフォルトの名無しさん
2012/02/02(木) 08:01:58.100050デフォルトの名無しさん
2012/02/02(木) 08:18:33.01いや所詮草ガキだから
0051デフォルトの名無しさん
2012/02/02(木) 22:23:01.171個の場合、複数でも連続でもないから、実は草ではない
0052デフォルトの名無しさん
2012/02/02(木) 22:49:35.37さすが小学生だな
目のつけどころが違う
0053デフォルトの名無しさん
2012/02/02(木) 23:18:44.34それは単草といって草の一種なのよ
0054デフォルトの名無しさん
2012/02/02(木) 23:34:57.87ダイアログおw表示させた時に初めての保存ならマイドキュメント、2回目以降なら前回のフォルダーを
表示されるようにするにはどうすればいいでしょうか?
よろしく御願いします。
0055デフォルトの名無しさん
2012/02/03(金) 02:11:09.99まず仕様をしっかり確定させないとプログラミングはできないぞ
初めてかどうかはどうやって判別するんだ?
前回のフォルダはどこにどうやって保存するんだ?
これが答えられない(わからない)ってなら、もうちょっと詳しく状況を書かんとなんとも言えん
0056デフォルトの名無しさん
2012/02/03(金) 06:32:53.23初めての保存→直接Excelを起動しての作成
2回目以降→既存のBookを呼出し修正保存
意味はこれで合っている?
1年1組成績表フォルダの1月成績結果というBookを呼出して新規作成を選んだ時の保存先もやはりマイドキュメント?
或いは2月成績結果にBook名に流用変更して保存する場合は?
0057デフォルトの名無しさん
2012/02/04(土) 06:16:46.60残念、ハズレ
というか、そもそも「単草」なんてないから
草=複数の連続する"w"
数が複数と定義されているので、単数を表す接頭語を付けることは無い
芝="w"そのものであり数は関係ない
数が定義されていないので、数を表す接頭語を付けることもある->単芝、複芝
「単草」ってのは君と同じく、単芝と草を混同した勘違い君が
思いつきで口にするだけで、定義としては存在していない
0058デフォルトの名無しさん
2012/02/04(土) 07:16:08.51どっちでもええやん
言葉とはそういう勘違いから定着するもんだよ
正しい日本語は〜と言ってる学者連中はただの馬鹿だぞ
もう広まってる用法ってのは正しいものとしていかんと
0059デフォルトの名無しさん
2012/02/04(土) 07:16:34.18そもそも「草」とか「芝」とかが定義されてるってどこで?
少なくとも非ネットの日常生活においてwを草とか芝とか言わない訳だが。
単にネット上のコミュニティーで認知されてると「君個人が認識してる」だけでしょ。
だったら「単草」だっておkじゃないの?
その辺の線引きが曖昧すぎだよ
ちなみに>>53ではありません。
草とか芝の定義とやらにも興味ないです
0060デフォルトの名無しさん
2012/02/04(土) 08:03:57.050061デフォルトの名無しさん
2012/02/04(土) 09:02:23.240062デフォルトの名無しさん
2012/02/04(土) 09:14:49.65これは僕はレス乞食ですって自己紹介をしてるだけなんだからwwww
0063デフォルトの名無しさん
2012/02/04(土) 10:15:29.22いい訳必死だな
あのさ、誤用と、新語や新たな言い回しを一緒くたにしてないか?
別に既存の日本語以外は使っちゃだめとは言わないけど、
間違いを内包する言葉までまとめて「定着すればそれは正しい」なんて言うのはただの馬鹿だぞ
wを芝と呼ぶのは良いが、wをエックスと呼ぶのは明らかな間違いだろ
>>59
> 「w」の文字が並ぶ様子が「雑草が生えているように見える」というところから、
~~~~~~
> 「w」を多数並べて笑いを表現する行為を「草を生やす」と呼ぶ場合がある。
~~~~~~~~~~~~~
> 草 - ネットスラングでwwwwwwwのこと。
> 草:インターネットスラングのひとつ。(笑)の略であるwを多数書き連ねることで蔑笑を表したもの。
~~~~~~~~~~~~~~~~~
どこを見ても、「並ぶ」「多数」「書き連ねる」と複数であることを説明し、例としても7連のものが上げられている
因みに上記は独断と偏見入り交じる個人サイトの記事ではなく、ウィキペやニコペなど大手の手がける辞典の記事ですよ
0064デフォルトの名無しさん
2012/02/04(土) 10:42:23.740065デフォルトの名無しさん
2012/02/04(土) 11:04:08.52スルーしとけ。
0066デフォルトの名無しさん
2012/02/04(土) 11:44:22.680067デフォルトの名無しさん
2012/02/04(土) 13:21:17.58それは信頼してWikipediaをバカにする男の人って本質がわかってないってゆーか、頭悪いよね
0068デフォルトの名無しさん
2012/02/04(土) 13:41:55.07広辞苑が個人の判断で作られてるって、これまた
頭悪い以前のアホが来たな。
0069デフォルトの名無しさん
2012/02/04(土) 17:37:20.460070デフォルトの名無しさん
2012/02/04(土) 18:56:03.91007154
2012/02/04(土) 19:32:32.70レス、ありがとうございます。
返事が遅くなってすみません。
ユーザーフォームに保存用のボタンを貼って、保存しようとしています。
保存を行った時に保存先フォルダーの記憶用変数を用意して、その変数が
空なら初めての保存、空白以外なら保存用ダイアログを表示した時にそのフォルダーが
表示したいという事でした。
変数に取り込めれば、フォームを閉じる際にiniファイル等に保存して次回以降は
フォルダー選択の手順を省けると思いました。
よろしく御願いします。
007254
2012/02/04(土) 19:55:05.76保存先記憶用変数が空の場合は、保存先ダイアログ表示時の
フォルダーはExcel任せでも良いです。
よろしくお願いします。
0073デフォルトの名無しさん
2012/02/04(土) 20:05:32.51まぁ単純にテキストファイルのオープンで読み込み書き込みでも出来なくはないだろうけど
0074デフォルトの名無しさん
2012/02/04(土) 20:16:21.93で、何がわからないの?
0075デフォルトの名無しさん
2012/02/04(土) 21:11:43.87chdir 前回保存先
名前を付けて保存ダイアログ表示
今回保存先を選択
非表示シートにcurdir(今回保存先)を書きみ保存
名前を付けて保存
0076デフォルトの名無しさん
2012/02/04(土) 23:05:00.06非表示・バックグラウンドでブックを開くにはどうしたら良いのでしょう?
ググったりしていろいろ試してみたのですが、どうしても一瞬表示されてしまいます。 マクロは
Application.ScreenUpdating = False
Set _ActiveSheet = ActiveSheet
Set book = Workbooks.Open(PATH)
book.Windows(1).Visible = False
Call _ActiveSheet.Activate()
Application.ScreenUpdating = True
というようにしています。
また、ブックのオープンに時間がかかっているため、非同期でブックをオープンしてそれをキューに放り込んで行きたいのですが、
こういったことはどうやってやれば良いのでしょう?
0077デフォルトの名無しさん
2012/02/04(土) 23:20:48.95ini ファイルじゃなくて、ブック自体に覚えさせることもできるよ。
Option Explicit
Const PropertyName As String = "SavedFolder"
Sub Macro1()
Dim SavedFolderProperty As DocumentProperty
Set SavedFolderProperty = Nothing
Dim Index As Integer
With ActiveWorkbook.CustomDocumentProperties
For Index = 1 To .Count
If .Item(Index).Name = PropertyName Then
Set SavedFolderProperty = .Item(Index): Exit For
End If
Next
End With
With Application.FileDialog(MsoFileDialogType.msoFileDialogSaveAs)
.FilterIndex = 2
If SavedFolderProperty Is Nothing Then
.InitialFileName = ""
Else
.InitialFileName = SavedFolderProperty.Value
End If
.Show
If SavedFolderProperty Is Nothing Then
ActiveWorkbook.CustomDocumentProperties.Add PropertyName, False, MsoDocProperties.msoPropertyTypeString, .SelectedItems.Item(1)
Else
SavedFolderProperty.Value = .SelectedItems.Item(1)
End If
.Execute
End With
End Sub
00782000
2012/02/05(日) 02:30:18.27> Application.ScreenUpdating = False
> Set _ActiveSheet = ActiveSheet
> Set book = Workbooks.Open(PATH)
> book.Windows(1).Visible = False
> Call _ActiveSheet.Activate()
ActiveWorkbook.Close
> Application.ScreenUpdating = True
0079デフォルトの名無しさん
2012/02/05(日) 17:31:56.30B1セルに10が入っていたらA1セルに100と返し、
〃 11か12、13のいずれかの数字が入っていたらA1セルに200と返し、
〃 14が入っていたらB1セルに300と返し、
〃が空欄もしくは、10.11.12.13.14以外の数字が入っていたら100と返す
数式を組みたいのですがIFとORを組み合わせてもうまくいきません。
どなたかご教授頂けますでしょうか。
0080デフォルトの名無しさん
2012/02/05(日) 17:38:45.19008179
2012/02/05(日) 17:43:45.11いえ、違います。
エクセル上で上記の数式を完成させたいだけです。
0082デフォルトの名無しさん
2012/02/05(日) 17:46:29.32だったら
Excel総合相談所 100
http://toro.2ch.net/test/read.cgi/bsoft/1325935411/l50
008379
2012/02/05(日) 17:50:34.95ちょっとこっちで質問してみます。
0084デフォルトの名無しさん
2012/02/06(月) 03:30:45.140085デフォルトの名無しさん
2012/02/06(月) 04:16:29.460086デフォルトの名無しさん
2012/02/06(月) 05:30:54.13プログラムとは…
自分が思った通りに動く物ではない
自分が書いたとおりに動くのである
つまり結果が自分の希望に反して不定になるのは書き方が悪い。はっきり言えば間違ってる
よく見直せ
0087デフォルトの名無しさん
2012/02/06(月) 06:58:44.08セルの内容でDBに更新を行う処理です
Set crs = New ADODB.Recordset
crs.CursorType = adOpenDynamic
crs.LockType = adLockOptimistic
crs.CursorLocation = adUseClient
crs.ActiveConnection = cn
'
sSQL = ""
sSQL = sSQL & "SELECT *"
sSQL = sSQL & " FROM WSEL"
sSQL = sSQL & " ORDER BY WSEL.Chusyutu"
crs.Source = sSQL
crs.Open
'
Do Until crs.EOF
:
DBの項目にセット処理
:
crs.Update ←エラー発生
crs.MoveNext
Loop
crs.Close
1/2
0088デフォルトの名無しさん
2012/02/06(月) 06:59:45.09DBはMySQLをODBCで使用しています
Updateのところでエラーが発生します
実行時エラー '-2147217864 (80040e38)':
行が見つからなかっため、更新できません。列の値は最後に読み込まれた後で変更された可能性があります。
OpenしてからUpdateまでただ項目をセットしているだけでカーソルを移動させていません
項目のセット処理を削除するとエラーは出ません
ただの ○○=×× という処理でカーソルが移動するとは思えないのですがどんな問題があるのでしょうか?
0089デフォルトの名無しさん
2012/02/06(月) 11:02:10.59その例で言えば
crs.Execute updateのsql文
という書き方でいつもExcelからmysqlに対してやってる
そのやり方ではどうなの?
まぁ続けるとスレ違いと騒ぎ出す野郎が多そうだから
mougのDB板で聞いてみたら?
0090デフォルトの名無しさん
2012/02/06(月) 20:30:01.60レスどうもです
>crs.Execute updateのsql文
この方法でやってみます
もし上手くいかなかったらDB板で聞くことにします
ありがとうです
0092デフォルトの名無しさん
2012/02/07(火) 04:59:35.620093デフォルトの名無しさん
2012/02/07(火) 12:04:22.02「初項(セル B3 の値)と公差(セル C3 の値)を元にして, セル範囲 B5:G5 に等差数列の値を入力する
マクロ「等差数列」を定義せよ」
という課題があるのですが、何から手を付ければいいのか分かりません。
よろしければご教授お願いします。
0094デフォルトの名無しさん
2012/02/07(火) 12:13:41.210095デフォルトの名無しさん
2012/02/07(火) 15:15:08.32おっぱい見せて
Option Explicit
Private Sub マクロ等差数列()
Dim 初項 As Double
Let 初項 = Application.ThisWorkbook.ActiveSheet.Range("B3").Cells(1, 1).Value
Dim 公差 As Double
Let 公差 = Application.ThisWorkbook.ActiveSheet.Range("C3").Cells(1, 1).Value
Dim 数列1番目 As Double
Let 数列1番目 = 初項
Application.ThisWorkbook.ActiveSheet.Range("B5").Cells(1, 1).Value = 数列1番目
Dim 数列2番目 As Double
Let 数列2番目 = 数列1番目 + 公差
Application.ThisWorkbook.ActiveSheet.Range("C5").Cells(1, 1).Value = 数列2番目
Dim 数列3番目 As Double
Let 数列3番目 = 数列2番目 + 公差
Application.ThisWorkbook.ActiveSheet.Range("D5").Cells(1, 1).Value = 数列3番目
Dim 数列4番目 As Double
Let 数列4番目 = 数列3番目 + 公差
Application.ThisWorkbook.ActiveSheet.Range("E5").Cells(1, 1).Value = 数列4番目
Dim 数列5番目 As Double
Let 数列5番目 = 数列4番目 + 公差
Application.ThisWorkbook.ActiveSheet.Range("F5").Cells(1, 1).Value = 数列5番目
Dim 数列6番目 As Double
Let 数列6番目 = 数列5番目 + 公差
Application.ThisWorkbook.ActiveSheet.Range("G5").Cells(1, 1).Value = 数列6番目
End Sub
0096デフォルトの名無しさん
2012/02/07(火) 16:41:05.200097デフォルトの名無しさん
2012/02/07(火) 17:30:37.03専門スレはないのでここで聞いてみる
Word(ワード)総合相談所 Part21
http://toro.2ch.net/test/read.cgi/bsoft/1319313721/
0098デフォルトの名無しさん
2012/02/07(火) 17:46:04.08場違い承知・まともな回答返ってこない前提でここかパワポVBAスレッドで聞いてアレンジするか
ググって見つかる掲示板利用するしか
0099デフォルトの名無しさん
2012/02/07(火) 17:48:36.970100デフォルトの名無しさん
2012/02/07(火) 17:51:41.95>おっぱい見せて
さろんへ行け。
0101デフォルトの名無しさん
2012/02/07(火) 17:51:42.530102デフォルトの名無しさん
2012/02/07(火) 21:11:34.07検索対象文字列の手前に改行を入れる、というVBAをつくろうとしています。
物:いちご物:みかん物:バナナ
となってる文章を
物:いちご
物:みかん
物:バナナ
と整形したいため、「物:」を検索し、その手前で改行を入れるVBAを作りたいです。
以下は自分で作ってみたものの、物:そのものを消して改行を3発入れてしまう駄作です。
Sub 検索()
With Selection.Find
.Text = "物:"
.Replacement.Text = ""
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchWildcards = True
Do While .Found = True
If .Execute(FindText:="物:", Forward:=True, Format:=True) = True Then
Selection.TypeParagraph
Selection.TypeParagraph
Selection.TypeParagraph
Else
End If
Exit Do
Loop
End With
エクセルならこーする、ワードは知らん。でも構いませんのでご教示頂けると幸いです。
0103デフォルトの名無しさん
2012/02/07(火) 21:24:17.08それひとつにしてそのあと"物:"追加すればいいんじゃね
つか物:を置換してマクロ記録すればすぐわかるような
0104デフォルトの名無しさん
2012/02/07(火) 21:36:32.82回答ありがとうございます。
例で出したソースは例えで、「物:」実際は数字や日付、名前のような動的なものが入ります。
なので静的に「物:」を後から足すという手法が使えません。
さらに、実際は改行は1発ではなく、間に3行欲しいので3発入れる必要があります。
例えが下手で申し訳ありません。
0105デフォルトの名無しさん
2012/02/07(火) 21:48:44.82VBAを試しに書いて実行してから保存をしてみたところ、VBAによって行われたシート側の改変まで保存されてしまうようなのですが、
コードの部分だけを保存する方法はないでしょうか?
0106デフォルトの名無しさん
2012/02/07(火) 21:51:57.10斜め上から
Sub 等差数列()
Range("B5") = Range("B3")
Range("C5") = Range("B3") + Range("C3")
Range("B5:C5").AutoFill Destination:=Range("B5:G5")
End Sub
0107デフォルトの名無しさん
2012/02/07(火) 21:57:15.58VBAを行うファイルとデータファイルとを別々にスレばいい。
今は同じブック内でやってんでしょ?
0108デフォルトの名無しさん
2012/02/07(火) 21:59:38.02なるほど、それは盲点でした
どうもありがとうございます
0109デフォルトの名無しさん
2012/02/07(火) 22:15:08.83オートフィルメソッドなんか使わんでも数式は代入だけでコピーできる
Sub 等差数列()
Range("b5") = "=b3"
Range("c5:g5") = "=b5+$c$3"
End Sub
さらに短かく
Sub 等差数列2()
Range("b5:g5") = "=$b$3+$c$3*(column()-2)"
End Sub
0110デフォルトの名無しさん
2012/02/07(火) 23:20:14.94それ 94 の方法でしょ
0111デフォルトの名無しさん
2012/02/07(火) 23:50:08.62>>97
または
mougでもいけばいいんじゃない
With Selection.Find
Replacement.ClearFormatting
.Text = "物"
.Replacement.Text = vbCr & "物"
.Execute Replace:=wdReplaceAll
End With
0112デフォルトの名無しさん
2012/02/08(水) 00:33:54.14の方々、ありがとうございます。とても助かります。
もうひとつ質問があるのですが、
・選択したセル範囲に対して、
a.空白セルの場合には背景色を黄色( RGB(255,255,0) )にする
b.空白でないセルの場合は背景色を色なし( xlColorIndexNone )にする
マクロ「チェック」を書きたいのですが、どのようにすればいいのでしょうか。
0113デフォルトの名無しさん
2012/02/08(水) 03:01:53.56順番は逆だが気にするな
中学か高校の情報の授業なんだろうが先生が期待している回答ではないかと
Sub チェック()
With Selection
.Interior.Pattern = xlNone
.SpecialCells(xlCellTypeBlanks).Interior.Color = RGB(255, 255, 0)
End With
End Sub
0114デフォルトの名無しさん
2012/02/08(水) 03:16:33.90Sub チェック()
Selection.Interior.Color = -4142
Selection.SpecialCells(4).Interior.Color = 65535
End Sub
0115デフォルトの名無しさん
2012/02/08(水) 04:11:01.60スレチの質問にヒントありがとうございます。
しかし実際は>>104なので、"物"とすることができません。
具体的には2ちゃんのレス番、名前欄手前に3つ改行を入れたいのです。
Sub TEST()
With Selection.Find
.MatchSoundsLike = False
.MatchFuzzy = False
.MatchWildcards = True
.Text = "[0-9]{1,3} :* ??:??:??.?? ID:????????"
.Replacement.Text = vbCr & vbCr & vbCr & "ここに何か".
.Execute Replace:=wdReplaceAll
End With
End Sub
検索結果をそのまま持ってくるような関数は無いでしょうか?
上記"ここに何か"部分にそれを入れれば上手く動きそうな気がします。
0116デフォルトの名無しさん
2012/02/08(水) 07:28:55.58>>97
0118デフォルトの名無しさん
2012/02/08(水) 16:14:10.84ありがとうございます。>>111さんに教えて頂いたmougにて有用な回答を得て解決出来ましたので
エクセルでも応用が利くかもしれないので、方法を貼っておきます。
.Replacement.Text = "^p^p^p\1"
とすることで、\1が置換後の文字列をそのまま使ってくれる事を教わりました。
これで解決することが出来ました。
以上です。ご回答頂き本当にありがとうございました。
0119デフォルトの名無しさん
2012/02/08(水) 23:04:47.66OS:WinXP-SP2
Ver:Excel2002です
目的:シートAとBの特定範囲を一括して印刷プレビュー
Sheets(Array("A", "B")).Select
Range("A1:F59").Select
Selection.PrintPreview
Sheets("C").Select
と入れてシートAとBのA1:F59の印刷プレビューを開きたいのですが
この命令を実行するとシートAのA1:F59のプレビューしか開けません。
シートAとBを一括してプレビューさせるには何が足りないのでしょうか?
0120デフォルトの名無しさん
2012/02/08(水) 23:58:52.00ActiveWindow.SelectedSheets.PrintPreview
0121デフォルトの名無しさん
2012/02/09(木) 00:17:23.02Worksheet オブジェクト(普通のシート)には PrintPreview メソッドが存在する、よってシートを選択してプレビューできる
sheets オブジェクト(複数のシートを保持できる)には PrintPreview メソッドが存在する、よって複数のシートを選択してプレビューできる
range オブジェクトには PrintPreview メソッドが存在する、よって範囲を選択してプレビューできる
range オブジェクトは同一シート内なら複数の範囲を保持できる、よって同一シート内なら複数の範囲をプレビューできる
ただし、Excel には複数のシートをまたがる複数の Range を保持できるオブジェクト自体が存在しない
そのため、それに対応する PrintPreview メソッドも存在しない
たぶん
0122デフォルトの名無しさん
2012/02/09(木) 00:36:45.70PageSetupを変更して良いなら
↓はどう?
Sheets("A").PageSetup.PrintArea = "A1:F59"
Sheets("B").PageSetup.PrintArea = "A1:F59"
Sheets(Array("A", "B")).PrintPreview
0123119
2012/02/09(木) 11:32:11.25ありがとうございました。
最終的にこうなりました。
Sub 印刷プレビュー()
'セルB55の数値からシート印刷か部分印刷かを判断
If Range("B55") <> "" Then
'B55に数値が存在するならばシート印刷
Sheets(Array("請求書", "見積書")).PrintPreview
Else
'B54に数値が存在しなければ部分印刷
Sheets("請求書").PageSetup.PrintArea = "A1:F59"
Sheets("見積書").PageSetup.PrintArea = "A1:F59"
Sheets(Array("請求書", "見積書")).PrintPreview
'印刷範囲を初期化
Sheets("請求書").PageSetup.PrintArea = "A1:F119"
Sheets("見積書").PageSetup.PrintArea = "A1:F119"
End If
End Sub
0124デフォルトの名無しさん
2012/02/09(木) 17:07:00.03このようにオブジェクト変数を使いセルを代入すると
その情報の中にそのセルの上位のシートやブックも一緒に保存されてるんですか?
0125デフォルトの名無しさん
2012/02/09(木) 18:46:47.98たしかParentプロパティとかに入ってたと思う。
0126124
2012/02/09(木) 19:08:28.56つまりそのRange型変数には入ってるってこと?
その特定のセルの場所を保存するには
ブック型変数(Dim〜as Workbook)、シート型変数(Dim〜as Worksheet)、セル型変数(Dim〜as Range)の3つが必要かと思ってたけど
セル型ひとつで済むならかなり楽だけど、違うのかな?
0127125
2012/02/09(木) 19:41:53.50レンジ型変数からシート名とブック名も取得できる
でもこんなことするより
シートやブックもオブジェクト変数に代入しちゃう方が早くないか?
Sub test()
Dim Rng As Range
Set Rng = ThisWorkbook.Sheets(1).Cells(1, 1)
Debug.Print Rng.Parent.Name
Debug.Print Rng.Parent.Parent.Name
End Sub
0128125
2012/02/09(木) 19:49:11.26ごめん、後半読んでなかった
セル範囲の指定をRange型変数ひとつでできないか、という話だったのね。
Range型変数に代入されたセル範囲はRange型変数だけで特定できるから
そういう意味ではWorkBook型やWorkSheet型の変数は不要だよ。
てっきりブックやシートの指定もレンジ型一つで全部済ませたい
ってことかと思ってたよ
(>>127で書いたとおりそれもできることはできるけど、
記述が長くなるからあんまりメリットを感じない。)
0129デフォルトの名無しさん
2012/02/09(木) 22:17:32.76バイト配列と文字列を比較するためにしなくてはいけないのですが、
型を合わせる方法がわかりません。 バイト配列から文字列、また
文字列からバイト配列に変換する方法を教えてください。
よろしくお願いします。
0130デフォルトの名無しさん
2012/02/09(木) 23:42:11.88バイナリファイルを文字列に変換して処理する例(すべてのバイトをを &H0000〜&H00FF のUnicode文字として変換)
Const adTypeBinary = 1
Sub Foo()
bin = LoadBin("D:\misc\a.txt")
n = GetBinSize(bin)
Text = ""
For i = 0 To n - 1
Text = Text + ChrW(CodeAt(bin, i))
Next
index = InStr(Text, ChrW(&HFF))
MsgBox "最初に見つけた &HFF の位置: " + CStr(index)
index = InStr(Text, "hello")
MsgBox "最初に見つけた hello の位置: " + CStr(index)
End Sub
Function LoadBin(path)
Set stm = CreateObject("ADODB.Stream")
stm.Type = adTypeBinary
stm.Open
stm.LoadFromFile (path)
LoadBin = stm.Read()
stm.Close
End Function
Function GetBinSize(bin)
GetBinSize = LenB(bin)
End Function
Function CodeAt(bin, index)
CodeAt = AscB(MidB(bin, index + 1, 1))
End Function
0131デフォルトの名無しさん
2012/02/09(木) 23:44:26.34>ANSI 形式のバイト型配列を文字列に変換する場合は、StrConv 関数を使用してください。
>Unicode 形式の配列を変換する場合は、代入式を使用してください。
以上 StrConv 関数のヘルプから
それ以外の文字コードだった場合はVBAだけで簡単にやる方法は多分ない
0132デフォルトの名無しさん
2012/02/10(金) 00:19:32.830133126
2012/02/10(金) 00:29:11.59すばらしい解説ありがとうございます。
なるほど、Rangeでもシートやブックの情報を裏で持ってたんですね。
頭スッキリしました。
こういうスッキリ感がプログラムという複雑化しやすいことを扱うにはものすごく重要ですしね。
ということはRangeのオブジェクト変数はものすごく便利ですね。
0134デフォルトの名無しさん
2012/02/10(金) 00:53:51.04○ChrW
×Chr
0135デフォルトの名無しさん
2012/02/10(金) 00:55:28.190136129
2012/02/10(金) 01:23:07.49具体的なサンプルありがとうございます。
SJISの場合はChrでUTFの場合はChrW
を使えばよいのでしょうか?
>>131
たしかSJISだったと思うのでStrConvを使えば
比較できるということですね。
ヘルプを確認してみます。
>>132
テキストモードでオープンすると正しく取得できない
値があるのでバイナリモードでオープンする方法を検討しています。
0137130
2012/02/10(金) 01:44:11.61>SJISの場合はChrでUTFの場合はChrW
違う
ChrWは単なる間違い
130の例で Shift_JIS の "あ" を検索したいなら、
Chr(&H82) + Chr(&HA0)
を検索する必要がある
面倒だけど、その代わりバイト並びさえ分かっていれば変換による情報落ちの心配なしにどんなコードでも処理できる、という例
0138デフォルトの名無しさん
2012/02/10(金) 11:13:23.28Error処理のしかた
プロシージャのCallの呼び方
きれいなコードの書き方
イミディエト窓の使い方
バグフィックスのしかた
など、普通の入門書にはほとんど書かれていないこともマスターしたいです
そのためのいい本はありますか?
0139デフォルトの名無しさん
2012/02/10(金) 13:05:03.46-------------------------------------------------
LoadするとInitializeイベントが発生して、
ShowでActivateイベントが発生する。
HideするとDeactivateイベントが発生して、
UnloadでTerminateイベントが発生する。
LoadしないでShowすると自動的にLoadされてShowするし、
HideしないでUnloadしても自動的にHideされてUnloadする。
0140デフォルトの名無しさん
2012/02/10(金) 13:07:14.91神!
こういう整理された情報こそ実用的であり非常に有用。
みんなも>>139みたいな情報を共有しあうために貼り付けようじゃないか!
0141デフォルトの名無しさん
2012/02/10(金) 13:34:27.98>ShowでActivateイベントが発生する。
>HideするとDeactivateイベントが発生して、
は正しくない
Showした結果アクティブになればActivateイベントが発生するし
Hideした結果アクティブじゃなくなればDeactivateイベントが発生する
HideしたからってかならずDeactivateが発生するわけじゃない
0142デフォルトの名無しさん
2012/02/10(金) 14:42:14.40そのworkbookの名前から取り出す方法を教えてください。
0143デフォルトの名無しさん
2012/02/10(金) 15:20:21.900144デフォルトの名無しさん
2012/02/10(金) 16:14:52.80WorkbookオブジェクトにはIndexプロパティがないので直接求めるのは無理
Workbooksコレクションをループで順番に見ていくしかない
けど>>143の言う通り、インデックス番号なんかわからなくてもプログラムは書ける
何がやりたいの?
0145142
2012/02/10(金) 16:31:35.110146デフォルトの名無しさん
2012/02/10(金) 16:33:32.37なぜ対象オブジェクトはシートなんですか?
普通に考えてセルであるべきだ。
納得される説明・理由が聞きたいのですが。
0147デフォルトの名無しさん
2012/02/10(金) 17:11:39.81短くしたいなら、
dim book as workbook
set book = workbooks("bookname.xls")
'以降bookを使ってコードを書く
の方が良くない?
0148デフォルトの名無しさん
2012/02/10(金) 17:34:20.86それならオブジェクトを変数に入れた方がいい
短くなるだけでなく、処理も少し軽くなる
具体例は>>147
コードを短くする方法はいくつかあって、Withを使うのも効果的
0149デフォルトの名無しさん
2012/02/10(金) 19:10:47.12そんなことをここで聞かれてもな
マイクロソフトに聞け
ただ、おまえが普段どんなコードでコピペしてるかしらんが
少なくとも俺はコピーするときはRangeが対象なことがほとんどだし
Rangeに張りつけたければPasteSpecialも使えるぞ
0150デフォルトの名無しさん
2012/02/10(金) 19:38:29.050151デフォルトの名無しさん
2012/02/10(金) 19:41:55.380152デフォルトの名無しさん
2012/02/10(金) 19:49:24.89あなたはどうしてますか
0153デフォルトの名無しさん
2012/02/10(金) 19:50:09.64ん?
0154デフォルトの名無しさん
2012/02/10(金) 19:57:04.82使い方をしらないからまだ使ったことない。
>>151
vbLINEかvbCRみたいなのなかったっけ?
VBAでワークシート関数を使いたいとき、Application.WorkSheetFunctionを使えばいいと書いてあるけど
どんな関数でもVBAでも使えるのですか?
さらにWorkSheetFunctionのあとは単にワークシート関数の単語を書けばいいだけ?
0155デフォルトの名無しさん
2012/02/10(金) 20:04:05.38FindとInstr
TextとFormat
DateとToday
その他多数
これみんなどうやって記憶してるの?
0156デフォルトの名無しさん
2012/02/10(金) 20:08:37.99VBAでもVLOOKUP関数は普通に使える
0157デフォルトの名無しさん
2012/02/10(金) 20:09:39.85オブジェクトブラウザで、WorksheetFunctionオブジェクトを見れば良い。
Application.WorksheetFunctionプロパティが返してくるのがこいつだから。
別にExcel固有の記述とかそういうものじゃない。
0158デフォルトの名無しさん
2012/02/10(金) 20:09:50.18vbCr
vbLf
vbCrLf
0159デフォルトの名無しさん
2012/02/10(金) 20:09:57.92気のせい?
0160デフォルトの名無しさん
2012/02/10(金) 20:12:30.38使ってれば自然に覚える
間違えばエラーが出るから、それを見て直す
忘れたらヘルプを見る、Googleで検索する
せっかくコンピューターが色々と助けてくれるんだから
完璧に暗記することよりも、それを活用する方法を考えた方が応用範囲が広くなる
0161デフォルトの名無しさん
2012/02/10(金) 20:20:58.66ありがとう。それはWorksheetFunctionを使って?
>>157
ありがとう。はじめオブジェクトブラウザを見てみた。たくさん入ってる関数は全部ワークシートの関数なんだね。
でも例えば単純なSum関数だとActivecell=Application.WorksheetFunction.Sum("A1:E5")と書けば
そのセルに”=Sum("A1:E5")”と入力されるってことで合ってます?
>>158
ありがとう。それだ。
>>159
今後仕事でVBA使うので復習中。
>>160
確かにそうですね。丸暗記はやめます。しかし例えば6か月くらいBAを全く使わないと基本機能すら忘れるね。
その忘れたときに思い出すための対策(例えば基本機能のメモと特殊的機能の一覧をノートにまとめるとか)は何かしといたほうがいいと感じてます。
0162デフォルトの名無しさん
2012/02/10(金) 20:25:47.45聞く前に試せば済むこった
0163デフォルトの名無しさん
2012/02/10(金) 20:30:50.240164デフォルトの名無しさん
2012/02/10(金) 20:34:24.980165デフォルトの名無しさん
2012/02/10(金) 20:34:45.43試してもエラーが出るんですけど。エラいこっちゃ。
0166デフォルトの名無しさん
2012/02/10(金) 20:36:28.19WorksheetFunction.Sum(Range("a1:e5"))
0167デフォルトの名無しさん
2012/02/10(金) 20:37:47.13ならうまくいきました。
しかもセルには数式じゃなく結果の数値のみが表示されてる。
もしVBAでセルに数式そのものを入力したい場合はどうすればいいの?
0168デフォルトの名無しさん
2012/02/10(金) 20:38:30.47ActiveCell.FormulaLocal = "=Sum(A1:E5)"
0169デフォルトの名無しさん
2012/02/10(金) 20:38:34.591分19秒先を越された・・・・・・
0170デフォルトの名無しさん
2012/02/10(金) 20:39:38.10ありが十匹。
ところで単にActiveCell= "=Sum(A1:E5)"、または、ActiveCell.Value= "=Sum(A1:E5)"、でも問題ないですか?
0171デフォルトの名無しさん
2012/02/10(金) 20:41:56.18試してみたらどうだ
0172デフォルトの名無しさん
2012/02/10(金) 21:32:09.710173デフォルトの名無しさん
2012/02/10(金) 21:47:11.33VBaのApplication.WorksheetFunction.のあとのSumでは
そのあとに続くコードが微妙に違うの?
Vlookupの場合は?
まさか関数ごとに全部覚えないといけないの?
>>171
できた。
0174デフォルトの名無しさん
2012/02/10(金) 21:52:43.03> Vlookupの場合は?
試してみたらどうだ
0175デフォルトの名無しさん
2012/02/10(金) 22:03:27.91[ファイル]と[フォルダ]のそれぞれ2つについて、
[移動][コピー][削除][名前の変更]の4つはどうコードで記述すればいいか(つまり2x4=8個について)、
どなたか教えていただけませんか?
それが載ってあるサイトのURLでもいいです。
(*[フォルダ]の[削除]は、もしその中にファイルやフォルダがあったらそれも含めて全部削除するとします)
0176デフォルトの名無しさん
2012/02/10(金) 22:09:50.59VBA力と回答力を試しているんですか
0177デフォルトの名無しさん
2012/02/10(金) 22:22:14.32んなもん、それぞれぐぐっていけばいいだけの話だろうが
Office TANAKA - トップページ
http://officetanaka.net/
http://officetanaka.net/excel/vba/filesystemobject/index.htm
あたり読めば?
0178デフォルトの名無しさん
2012/02/11(土) 07:56:33.53まあまあですね
0179デフォルトの名無しさん
2012/02/11(土) 17:49:13.59くやしいのうwwwwwwwwwくやしいのうwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
0180デフォルトの名無しさん
2012/02/11(土) 19:00:02.040181デフォルトの名無しさん
2012/02/11(土) 22:54:53.04セル範囲を指定してコピー、別シートに貼り付けをしているのですが、
コピー自体はできるのですが図形の大きさが変わったり、印刷した時の大きさが違ったり
してしまいます。
全く同じにコピーするにはどうすればいいのでしょうか?
シート自体のコピー挿入の方がいいのでしょうか?
よろしくお願いします。
0182デフォルトの名無しさん
2012/02/12(日) 00:28:06.43図形の生成はマクロでやってる?
そうならコピペせなんでも生成時のアドレス変えてもう一つ作ればいいんじゃ?
もし、マクロで生成したものでない図形を〜って話なら
図形のプロパティでセルの移動とかにあわせて大きさを変えないようにすればいけるかと。
ペースト先セルの列の幅やら行の高さやらがコピー元と違うと大きさ修正されちゃうし。
0183デフォルトの名無しさん
2012/02/12(日) 03:55:14.430184デフォルトの名無しさん
2012/02/12(日) 14:52:49.170185デフォルトの名無しさん
2012/02/12(日) 14:59:31.37Alt+F11
0186デフォルトの名無しさん
2012/02/12(日) 15:19:23.680187129
2012/02/12(日) 23:35:21.88全角文字、たとえば”あ”を&H82 + &HA0に変換する場合は
どうすればよいのでしょうか?
以下のように記述を比較してみましたが一致しませんでした
ご教授おねがいします。
msg = Chr(Asc("あ"))
msg2 = Chr("&H82") + Chr("&HA0")
0188デフォルトの名無しさん
2012/02/12(日) 23:40:08.67MsgBox Hex(Asc("あ"))
0189デフォルトの名無しさん
2012/02/12(日) 23:52:57.06できる?
頻繁にやるのは望ましくない?
0190デフォルトの名無しさん
2012/02/13(月) 00:22:53.83たとえばBook1.xlsmのThisWorkbookにあるsub testを呼び出すなら
Application.Run "Book1.xlsm!ThisWorkbook.test"
でできる
頻繁どころか、アドインでもない限り他ブックのマクロ実行させるのはまったく好ましくない
0191デフォルトの名無しさん
2012/02/13(月) 00:23:18.72そういうことってできる?
たとえば5と入力したら別Window(Form)を開いて
そこに5つのラベルとテキストボックスを挿入したいの。
0192デフォルトの名無しさん
2012/02/13(月) 00:26:32.220193デフォルトの名無しさん
2012/02/13(月) 00:57:04.90もちろんできる
複数のブックから使用するマクロを別ブックにしたり、
複数のブックのマクロを呼び出すメニュー用のブックを作ったり、
xlsxのファイルで使用するためのマクロを別ブックにしたり、
いろいろ
ExcelVBAの考え方としては、データを置くワークシートと、
プログラムを置く標準モジュールをどう配置するか
0194187
2012/02/13(月) 01:11:58.07ありがとうございます。
MsgBox Hex(Asc("あ")) は 82A0と表示されましたが
MsgBox Hex(Asc(Chr(&H82) + Chr(&HA0))) が 8145になってしまいましたが
MsgBox Hex(Asc(Chr(&H82A0)) では 80A0と表示されたのでこちらとは一致させることができました。
全角文字の場合には &H80A0 のような書きかたが正しいのでしょうか?
しかし >>130 のコードで
”あいうえお”を検索したく
msg = Chr(&H82) + Chr(&HA0) + Chr(&H82) + Chr(&HA2) + Chr(&H82) + Chr(&HA4) + Chr(&H82) + Chr(&HA6) + Chr(&H82) + Chr(&HA8)
InStr(Text, msg)
とした場合には検索できるのですが
msg = Chr(&H82A0) + Chr(&H82A2) + Chr(&H82A4) + Chr(&H82A6) + Chr(&H82A8)
InStr(Text, msg)
のような書きかたをした場合には検索できませんでした。
”あいうえお” を検索する場合にはどういう書きかたをすればよいのでしょうか?
0195デフォルトの名無しさん
2012/02/13(月) 02:04:05.27>>130のコードに突っ込めば直ぐ解る。
0197デフォルトの名無しさん
2012/02/13(月) 19:33:16.74書いたのですが、Win7 32bitでは希望通りの動きなのですが、64bitだと
マイドキュメントが選択された状態で表示されてしまいます。
xlAPP.GetSaveAsFilename(InitialFileName:=SaveDir & FileName)
64bit版でも指定したフォルダーを選択状態にさせるにはどうすればいいですか?
よろしくお願いします。
0198デフォルトの名無しさん
2012/02/13(月) 19:57:03.92コピーし忘れがありました。
一度保存すると、その時のフォルダーを保存しておいて、2回目からは
SaveDirに記憶したフォルダーを選択するようにしています。
SaveaDir = CurDir
そのために上記の様にして記憶するようにしています。
(このスレを読んで参考にしました。)
32bit版は変数の中身が変わるのですが、64bit版ではブックを読みだしたフォルダーから
変更されない感じです。
よろしくお願いします。
0199デフォルトの名無しさん
2012/02/13(月) 20:18:43.27省略しすぎ。もう少しコードを見せられないの?
0200デフォルトの名無しさん
2012/02/13(月) 21:24:43.24ディレクトリだけ?
ファイル名は正しく表示されるの?
0201デフォルトの名無しさん
2012/02/14(火) 15:30:51.13下記のプログラムでYAHOO競馬からラップタイムって物だけをダウンロードしてきてるんですが、今は
1Rづつしか持って来れてないんで、これを全レース(最大で1日36R)一回の作業でダウンロードしてくる
プログラムに直せませんか?
宜しくお願いいたします!
Sub test()
Dim ie As Object
Dim elements As Object
Dim i As Integer
Cells.Clear
Set ie = CreateObject("InternetExplorer.Application")
ie.Visible = True
ie.Navigate "http://keiba.yahoo.co.jp/race/result/1206010512/"
Do While ie.Busy Or ie.ReadyState <> 4: DoEvents: Loop
Set elements = ie.Document.getElementsByTagName("div")
For i = 0 To elements.Length - 1
If elements(i).innertext Like "ラップタイム*" Then
Set elements = elements(i).getElementsByTagName("td")
Exit For
End If
Next
For i = 0 To elements.Length - 1
Range("B" & i + 1).Value = elements(i).innertext
Next
ie.Quit
Set ie = Nothing
End Sub
0202デフォルトの名無しさん
2012/02/14(火) 17:43:32.49& "\" &
0203デフォルトの名無しさん
2012/02/14(火) 21:01:01.4632ビット版なので確認できないが、
64ビット版だとSaveDirに関係なくいつもマイドキュメントが開くってことか
Sub test()
Const FileName = "test.xlsx"
Const SaveDir = "C:\"
Dim fname
MsgBox CurDir
fname = Application.GetSaveAsFilename(InitialFileName:=SaveDir & FileName)
MsgBox CurDir
End Sub
0204197
2012/02/14(火) 22:05:33.85どうも、CurDirの返り値が32bit、64bitで違うみたいです。
32bitの時は保存したり、読み出したりした時のフォルダーが返ってくるのですが、
64bitの時は読み出したフォルダーが返ってくるみたいです。
'保存
Save_NAME = xlAPP.GetSaveAsFilename(InitialFileName:=Save_Name)
'保存先フォルダー記憶
File_Name = Dir(Save_NAME)
Save_dir = Replace(Save_NAME, File_Name, "")
こんな感じでできるようになりました。
0205デフォルトの名無しさん
2012/02/14(火) 22:07:08.20○ Save_NAME = xlAPP.GetSaveAsFilename(InitialFileName:=Save_dir)
です
0206デフォルトの名無しさん
2012/02/15(水) 00:10:13.68いらん機能までゴテゴテ付けたら改行が多すぎるって怒られちったお
Sub test()
Dim ie As Object, elements As Object
Dim i%, url$, n%, y%, m%, d%, r%
Dim name As Variant
Dim flg As Boolean
Dim j As Variant
name = Array("札幌", "函館", "福島", "新潟", "東京", "中山", "中京", "京都", "阪神", "小倉")
url = "http://keiba.yahoo.co.jp/race/result/"
j = Application.InputBox("開催地、年月日をすべて2桁の数値で入力" & vbCrLf & _
"札幌=01,函館=02,福島=03,新潟=04,東京=05,中山=06,中京=07,京都=08,阪神=09,小倉=10", "下記の順にデータを入力してください", , , , , , Type:=2)
If j = False Then Exit Sub
If Len(j) <> 8 Then Exit Sub
n = Left(j, 2): y = Mid(j, 3, 2): m = Mid(j, 5, 2): d = Mid(j, 7, 2)
With ThisWorkbook.Sheets(1)
.Cells.Clear
.Cells(1, 1) = y & "年" & m & "月 " & name(n - 1) & d & "日目"
For i = 1 To 11
.Cells(1, 1).Offset(i).Value = "^" & i * 200
Next i
Set ie = CreateObject("InternetExplorer.Application")
ie.Visible = True
0207206の続き
2012/02/15(水) 00:10:51.20flg = False
ie.navigate (url & y & Format(n, "00") & Format(m, "00") & Format(d, "00") & Format(r, "00") & "/")
Do While ie.Busy Or ie.readyState <> 4: DoEvents: Loop
Set elements = ie.document.getElementsByTagName("div")
For i = 0 To elements.Length - 1
If elements(i).innerText Like "ラップタイム*" Then
flg = True
Set elements = elements(i).getElementsByTagName("td")
Exit For
End If
Next i
If Not flg Then
.UsedRange.EntireColumn.AutoFit
Exit For
End If
For i = 0 To elements.Length - 1
.Cells(1, 1).Offset(, r).Value = r & "R"
.Cells(2, 1).Offset(i, r).Value = elements(i).innerText
Next i
Next r
Set elements = Nothing
ie.Quit
Set ie = Nothing
End With
End Sub
0208206
2012/02/15(水) 00:15:06.33ie.visible=true
はFalseのほうが画面の切り替えがなくて好きだけど、
非表示にしとくとIEのアクセスでエラーが出てるときの
エラーメッセージも表示されなくなるんだっけ?
0209206
2012/02/15(水) 00:19:14.69入力する年月日のうち、日は日付じゃなくて開催何日目かなので
そこんとこよろしく
(たとえば、06120105は中山競馬場、2012年1月の開催5日目の意味)
0210デフォルトの名無しさん
2012/02/15(水) 00:31:34.64多分、一つの競馬場では1日に12レースしかやらないと思うよ。
同じ日に最大で3カ所開催するから3*12で36レースってことじゃないかな?
0211206
2012/02/15(水) 00:54:42.24えーと、
ご指摘ありがとうございます・・・orz
私は競馬やったことないんで知りませんでした。
そうすると、開催地の変更もループ処理に掛けないといけないですね。
でも、ちょっと調べたところ、
http://keiba.yahoo.co.jp/schedule/list/2012/?month=1
ここを見たら同じ日でも場所によって開催何日目かがまちまちなので、
単純に場所だけを変えても上手くいかなそうです。
(データを取り込むURLが
[年][場所][月][開催何日目][何レース]の組み合わせですので、
日付から開催日を知る方法がないとすべてのデータが取り込めません。)
同じ日に開催する場所や日数に何か規則性があるなら良いのですが、
私は競馬のことをよく知らないので見当も付きません。
力不足で申し訳ないです。
0212デフォルトの名無しさん
2012/02/15(水) 02:52:59.70何か別な方法考えてみます!
0213デフォルトの名無しさん
2012/02/15(水) 03:05:01.57丸投げじゃなく自力でがんばってみる気があるなら
http://keiba.yahoo.co.jp/schedule/list/2012/?month=1
↑のページからURL情報を取得すればできると思うぞ
開催年と開催月 は↑のURL にあるし
開催日はページ内にあるから対象日の 開催名のリンク先URLを取得して
レースNoを付加してやればいいと思う
0214デフォルトの名無しさん
2012/02/15(水) 04:15:47.11なんとか頑張ってみます!!
0215デフォルトの名無しさん
2012/02/15(水) 11:53:49.85空欄があった場合に「名前を入力して下さい」とかメッセージボックスで表示するようにしたいんです。
それでもし、複数の項目が空欄なら「名前を入力して下さい」「年齢を入力して下さい」と
1つのメッセージボックス内に表示されるようにしたいのです。
順列組み合わせをIFしていったらすごいことになるので短くプログラムする方法はないかなと思いまして。
IFのネストとかstrを使ってとか断片的には思い浮かぶんですけど……
0216デフォルトの名無しさん
2012/02/15(水) 12:31:51.42シートにフォームのボタンを貼ったのですが、このボタンをVBAから押した
ことにする方法はあるでしょうか。
0217デフォルトの名無しさん
2012/02/15(水) 14:01:56.17何項目あるかしらんが、一つずつ検査して文字列にまとめるのが結局いちばんはやくて保守しやすいんじゃね?
Private Sub CommandButton1_Click()
Dim str As String
If TextBox1 = Empty Then
str = "TextBox1が空白です" & vbCrLf
End If
If TextBox2 = Empty Then
str = str & "TextBox2が空白です" & vbCrLf
End If
If TextBox3 = Empty Then
str = str & "TextBox3が空白です" & vbCrLf
End If
If TextBox4 = Empty Then
str = str & "TextBox4が空白です" & vbCrLf
End If
If TextBox5 = Empty Then
str = str & "TextBox5が空白です" & vbCrLf
End If
MsgBox str
End Sub
0218デフォルトの名無しさん
2012/02/15(水) 14:20:34.57なりました!
ありがとうございますm(_ _)m
0219デフォルトの名無しさん
2012/02/15(水) 17:36:33.04そのボタンを押した時に実行するプロシジャを実行すれば良いだけなのでは?
0220デフォルトの名無しさん
2012/02/16(木) 01:25:02.28> そのボタンを押した時に実行するプロシジャを実行
でなく、そのボタンを押す事は出来ないの?
0221デフォルトの名無しさん
2012/02/16(木) 01:40:57.51CommandButton1_Click
命令文うんたらかんたら
0222デフォルトの名無しさん
2012/02/16(木) 03:33:49.75メッセージを送ればボタンは押せるけど
プロシージャ実行と結果は同じだから手間がかかるだけで意味がない
他の常駐アプリでボタンクリックのメッセージ監視目的とかだとスレ違い気味だし
そんだけ知識ある人がこんな質問するとは思えない
0223デフォルトの名無しさん
2012/02/16(木) 09:20:50.66UWSC使え w
0224216
2012/02/16(木) 10:15:08.10>>222
どうやってシートのボタンオブジェクトを取得して、どんなメッセージを送ったらよいのでしょうか。
VC++とかはよく使いますが、ExcelVBAは初めてです。
ユーザーフォーム上のボタンは押したことにできるので、シート上のフォームのボタンも押す方法が
ないか探しております。
よろしくお願いいたします。
0225デフォルトの名無しさん
2012/02/16(木) 12:51:14.76Sub onButton()
Worksheets("Sheet1").CommandButton1.Value = True
End Sub
Sub onButton()
Worksheets("Sheet1").OLEObjects("CommandButton1").Object.Value = True
End Sub
どちらでもすきなように
0226デフォルトの名無しさん
2012/02/16(木) 18:29:17.43Excel2007
A1 ALL1
A600 ALL600
この範囲内に画像を取り込んでモザイク画を作っています。
画像サイズによっては空白部分も多いのですが空白部分を省いて印刷するにはどうすればいいでしょうか?
プリンターの関係上A1サイズなので後で組み合わせるのにヘッダーでページ番号もつけています
0227デフォルトの名無しさん
2012/02/16(木) 19:00:52.59印刷した時にどこで切れるかはHPageBreaks(n).Location
またはVPageBreaks(n).Locationで調べることができる
あとは、ページごとにセルの色が全部標準か白なら印刷しないっていう
ちょっと面倒なプログラムを書くしかない
0228デフォルトの名無しさん
2012/02/16(木) 20:50:50.26それってフォームのボタンでないんじゃない
0229デフォルトの名無しさん
2012/02/16(木) 22:53:25.40VBAにアドインってのが有るそうなんですが、マクロをアドインとかいうものにするのはどういうメリットがあるんですか?
皆さん、どういう風につかっておられます?
0230216
2012/02/16(木) 23:29:29.26ありがとうございます!
コントロールツールボックスのボタンの場合は、どのようにしたらよいでしょうか。
0231デフォルトの名無しさん
2012/02/16(木) 23:37:49.90>>225がコントロールツールボックスのボタンの場合じゃないのか
0232デフォルトの名無しさん
2012/02/17(金) 08:00:18.97アドインって .xla のこと?
.dll のように、色んなワークブックからCallされる自分用関数をまとめておくとか。
でも、キャッシュみたいのがかかっていて結果不定になるので、デバッグ面倒だよ。
0233デフォルトの名無しさん
2012/02/17(金) 17:43:41.83229です。
>結果不定になるので、デバッグ面倒だよ。
なんか扱いが大変そうだな・・・
教えていただきありがとうです
0234デフォルトの名無しさん
2012/02/17(金) 17:52:06.19> でも、キャッシュみたいのがかかっていて結果不定になるので、デバッグ面倒だよ。
んなこと全然無い。
アドインのメリット。
例えば、社内用の勤怠計算を行うマクロを書いたとする。
そのマクロが入った、データ入力用シート入りのBookを社員に配布する。
配布した後で、バグが見つかって修正したり、機能を追加したりしたくなったらどうする?
「マクロが入った、データ入力用シート入りのBook」だと、もうデータ入力済みの場合、
全員のBookをまるごと取り替えることはできないから、マクロ部分だけ入れ替える必要がある。
これを、「勤怠計算を行うマクロ」が入ったxlaと、データ入力用のBookに分けておくと、
xlaを更新したら全員に配布して、ファイルを入れ替えてねで済む。
もちろん、他言語のライブラリ同様、ライブラリとしてのメリットは全て持ってる。
0235デフォルトの名無しさん
2012/02/17(金) 19:17:34.631日 名前A 条件1
1日 名前B 条件2
8日 名前C 条件1
8日 名前D 条件2
8日 名前E 条件1
8日 名前F 条件2
とシート1にデータがあり、別シートのリストに8日で条件2に合致する名前だけを
上から順に(空白行無しで)抜き出す場合、どのような関数を使えば出来るでしょうか?
IFでやろうとするとどうしても不一致の行が空白になってしまいます。
お力添えをよろしくお願いします。
0236デフォルトの名無しさん
2012/02/17(金) 19:53:43.47VBAでではなく、ワークシート関数でってなら
Excel総合相談所 100
http://toro.2ch.net/test/read.cgi/bsoft/1325935411/l50
0237デフォルトの名無しさん
2012/02/17(金) 20:33:56.120238デフォルトの名無しさん
2012/02/17(金) 20:43:07.850239デフォルトの名無しさん
2012/02/18(土) 01:22:32.32表の右に設置したボタンを押すと隣接するセルの背景色が変化するものを作っています。
ボタンの数が100程度あるのですが、ボタン1つ1つに以下の関数を格納するのには非常に手間がかかります。
Private Sub CommandButton1_Click()
With Range("A2").Interior
.ColorIndex = 36
.Pattern = xlSolid
End With
End Sub
Private Sub CommandButton2_Click()
With Range("A3").Interior
.ColorIndex = 36(省略)
一括で設定する方法はありませんか?
0240デフォルトの名無しさん
2012/02/18(土) 01:26:54.85誤 With Range("A2").Interior
正 With Range("A2:C2").Interior
0241デフォルトの名無しさん
2012/02/18(土) 01:31:10.99○ チェックシートを作成したいのですが、
日本語は大切にね
0242デフォルトの名無しさん
2012/02/18(土) 01:34:56.42スレ違いな答えになるけど、条件付き書式を使ったほうがいいかと。
書式を「"○"」、条件付き書式として0より大きいなら背景色を設定とかやれば、
1を入力してやればチェックって感じに出来ると思う。
0243デフォルトの名無しさん
2012/02/18(土) 01:42:17.46コマンドボタンはどのセルに配置してあるの?
D列のセル?
0244239
2012/02/18(土) 02:02:35.32失礼しました。
以後気をつけます。
>>242
ググってみましたが自分の希望に沿えるものではなさそうです。
あくまでワンクリックで背景色の変化ができるものを作成したいと思っております。
参考画像を用意いたしました。ttp://uploader.sakura.ne.jp/src/up84658.jpg
作成したいと思っているチェックシートについて
・隣接する行の背景色を変えることによるチェックをする。
※詳細
チェックボタンを押すと背景色を変化させる
(With Range("A2").Interior .ColorIndex = 36 以下略)
さらに隣の取り消しボタンを押すと背景色なし設定にする
・値の入力ではなく、ボタンをワンクリックすることで変化させる。(これが重要事項だと思われます)
例の画像は8行ですが実際に作成するものは100行以上になります。
以上になります。よろしくお願いいたします。
0245239
2012/02/18(土) 02:11:02.38画像では見やすくするために中央のほうへ寄せましたが、
いわゆるD列にボタンが配置されているものと思われて結構です。
ボタン自信をセルに配置することが自分の知識ではわからないので、
配置はコピーで行ってます。(セルを選択してCtrl+vを押すだけなので我慢)
つまるところボタンのオブジェクト名の番号が1,2,3...と上昇します。
ボタンが数個なら>>239のコードを複数コピーして値を変化させることができますが、
100以上となると無理ではありませんが非常に面倒です。
そこで一括で設定する方法は無いものか模索していたところです。
多分一番重要なことを忘れていましたが私はExcelVBAについては初心者です。
度々すみません。よろしくお願いいたします。
0246デフォルトの名無しさん
2012/02/18(土) 02:15:02.93答えてあげたいが、時間がない
例えば
topleftcellを引数で渡すプロシージャを作って
それぞれのボタンクリックのプロシージャから
呼び出せば?
テキスト(プログラム)を出力するプログラムを書いて
それをインポートする手もある
クラスモジュールを使うか
0247デフォルトの名無しさん
2012/02/18(土) 02:56:50.47よくわからんがこんなのでいいのか?
' ボタンを D5 から 10個作成
Sub CreateButtons()
Set baseaddress = ActiveSheet.Range("D5")
For i = 1 To 10
CreateButton baseaddress.Cells(i, 1)
Next
End Sub
Sub CreateButton(cell)
x = cell.Left
y = cell.Top
w = cell.Cells(2, 2).Left - x
h = cell.Cells(2, 2).Top - y
Set btn = ActiveSheet.Buttons.Add(x, y, w, h)
btn.Text = "chk"
btn.Name = "chkbtn_" & cell.Row
btn.OnAction = "CheckButton_Click"
End Sub
Sub CheckButton_Click()
Row = Mid(Application.Caller, 8)
With Range("A1").Cells(Row, 1).Interior
.ColorIndex = 36
.Pattern = xlSolid
End With
End Sub
0248247
2012/02/18(土) 03:13:52.81ボタンクリックのイベント内からは Application.Caller でクリックしたボタン名が取得できる
ボタン名をあらかじめ chkbtn_<行番号> として作成しておき、イベント内で行番号をボタン名から切り出して現在の自分の行番号を取得している
イベント内でボタン名が取得できるので、クリックのイベントプロシジャを個別に作成する必要はなく、すべて共通でよい
この例はチェックボタンだけだけど、当然同じやり方でクリアボタンも作成できる
0249239
2012/02/18(土) 03:25:21.74試してみましたがうまく動作しませんでした。
多分こちらのボタンの置き方が悪いのかもしれません。
(前述の通りExcelVBA及びコンソールの配置等は初心者です。すみません。)
また関数の大まかな意味も知っておきたいのですが、
もしお時間が許すのであればご教示のほどをお願いします。
0251239
2012/02/18(土) 03:45:13.45すみません何度か試行錯誤を繰り返してみましたがどうにもうまく動作しません。
お手数ではありますが扱い方のご教示、
もしくはソースファイルのアップロードをお願いいたしたいのですが。
0253デフォルトの名無しさん
2012/02/18(土) 04:37:15.26俺は247さんじゃないけど、
247さんのコードを標準モジュールにコピペするだけで動いたよ
(全部コピペして、Sub CreateButtons() を実行)
ちなみに環境はWin7 64bit、Excel2000、です
むしろ貴方がどのようにやったのかを具体的に提示したほうが早いと思う。
たとえば上記コードを標準モジュールじゃなくボタンに貼り付けたりしてないよね?
0254239
2012/02/18(土) 05:25:47.81今までシート自体にコードを貼り付けていました。
標準モジュールを新たに挿入して貼り付けたら無事動作いたしました!
大変勉強にもなりました。
ご回答していただいた皆様本当にありがとうございました。
ソースコードを記述いただいた>>247さんには感謝の限りです!
本日は朝も近いのでお休みいたします。
最後に改めてありがとうございました。
0255デフォルトの名無しさん
2012/02/18(土) 06:44:14.37どうすれば行を(この場合だとA2からC2までの)指定出来ますかね
0256253
2012/02/18(土) 09:55:21.93With Range("A1").Cells(Row, 1).Interior
を
With Range("A1").Cells(Row, 1).Resize(, 3).Interior
にするとAからCの3列が書き換わる
0257デフォルトの名無しさん
2012/02/18(土) 13:19:54.76標準モジュールを新たに挿入すると内容が二つとも同じになってしまいます。
対処法を調べても理解できないのでどなたか教えてください。
0258デフォルトの名無しさん
2012/02/18(土) 13:37:55.77Sub CreateButtons()
Set baseaddress = ActiveSheet.Range("D5")
For i = 1 To 10
CreateButton baseaddress.Cells(i, 1), True
CreateButton baseaddress.Cells(i, 2), False
Next
End Sub
Sub CreateButton(cell, check)
x = cell.Left + 4
y = cell.Top + 2
w = cell.Cells(2, 2).Left - x - 4
h = cell.Cells(2, 2).Top - y - 2
Set btn = ActiveSheet.Buttons.Add(x, y, w, h)
btn.Text = ""
btn.Name = "chkbtn_" & cell.Row
If check Then
btn.OnAction = "CheckButton_Click"
Else
btn.OnAction = "ClearButton_Click"
End If
End Sub
0259258
2012/02/18(土) 13:38:28.19Sub CheckButton_Click()
Row = Mid(Application.Caller, 8)
With Range("A1").Cells(Row, 1).Interior
.ColorIndex = 36
.Pattern = xlSolid
End With
End Sub
Sub ClearButton_Click()
Row = Mid(Application.Caller, 8)
With Range("A1").Cells(Row, 1).Interior
.Pattern = xlNone
End With
End Sub
0260253
2012/02/18(土) 13:46:16.46具体的にはどう調べたの?
これって調べてどうこう言うような次元の話じゃなくて
単純にVBAのプログラムが読めるかどうかの話だよ。
一応説明すると、247氏のコードは3つのプロシージャから構成されてるけど、
Sub CreateButtons() は単に最初のセル位置(D5)を決めて、
そこから下方向に10回同じことを繰り返す、って言う処理だけを指示している。
次の Sub CreateButton(cell) で指示されたセル位置にボタンを作る作業をしている。
作るボタンの名前は"chkbtn_"に何番目のボタンかを示す数字1~10が付いたもので、
そのボタンの動作は"CheckButton_Click"で指定されたものになる
で、最後の Sub CheckButton_Click() は上で書いたとおり、
そのボタンがクリックされたときの動作を指定している。
つまり、ボタンの名前"chkbtn_"+番号 の番号部分からセルの行位置を割り出して
その行の色を塗り替えてるわけ。
だから取り消しボタンを作りたいなら2番目のプロシージャに取り消しボタンを作る処理を追加して、
3番目と同様に取り消しボタンの動作を指定する4番目のプロシージャを書き足す作業をすれば良いんだよ。
これだけ説明されて分からないなら、多分今の貴方には作れないと思うよ
0261253
2012/02/18(土) 13:51:56.14>>258さんがコード作ってくれちゃったね。
>>257良かったな。
でもこういうのただ丸投げするより
動作原理を理解して自分でいじれるようになった方が良いから
自分でもがんばってね
0262デフォルトの名無しさん
2012/02/18(土) 14:07:08.52一部修正必要だけど、257には無理かもね
0263デフォルトの名無しさん
2012/02/18(土) 14:24:35.19あらかじめ Dictionary 使ってオブジェクト名をキーにして情報格納しておけば、
ボタンクリックでオブジェクト名から数字だけを切り出すまでもなく、
座標やチェック/クリアの属性なんかも関連付けできるようになるのでいろいろ応用は効く
0264253
2012/02/18(土) 14:34:40.85>作るボタンの名前は"chkbtn_"に何番目のボタンかを示す数字1~10が付いたもので、
は1~10じゃなくてそのボタンの行が入ってる。最初のボタンがD5だから5~14になるね
>>262
あ、ほんとだ塗りつぶしボタンと取り消しボタンに同じ名前指定してるね
とりあえず
btn.Name = "chkbtn_" & cell.Row
の部分も
If check Then
の中に入れて条件分岐で名前変えるのが早いかな
取り消しは"clrbtn"とかだね
0265デフォルトの名無しさん
2012/02/18(土) 14:47:53.44いやオブジェクト名は、どのみち影響しないけど
修正したいと言うと予想されるのはキャプションのほうね
0266デフォルトの名無しさん
2012/02/18(土) 17:18:24.54alt+F11押したらVBAProjectパスワード、要求されたんだけど、へるぷみー
0267デフォルトの名無しさん
2012/02/18(土) 17:29:55.960268デフォルトの名無しさん
2012/02/18(土) 23:05:13.47ちなみに昭和や平成の他の年もいっぱいまざっています。
0269デフォルトの名無しさん
2012/02/18(土) 23:20:54.490270デフォルトの名無しさん
2012/02/19(日) 00:13:58.80の考慮が漏れてるではないか。
0271デフォルトの名無しさん
2012/02/19(日) 00:20:14.510273デフォルトの名無しさん
2012/02/19(日) 03:27:02.71年だけの場合
Public Function 元年変換From年(paramValue As String) As String
Dim i As Integer, yearValue As String
元年変換From年 = paramValue
For i = 1 To Len(paramValue)
If Mid(paramValue, i, 1) Like "#" Then yearValue = Mid(paramValue, i): Exit For
Next i
If Val(yearValue) = 1 Then 元年変換From年 = Replace(元年変換From年, Val(yearValue), "元")
End Function
年月日の場合
Public Function 元年変換From年月日(paramValue As String) As String
Dim paramDateValue As Date
paramDateValue = DateValue(paramValue)
元年変換From年月日 = Format(paramDateValue, "ggg") & IIf(Format(paramDateValue, "e") = 1, "元", Format(paramDateValue, "e")) & Format(paramDateValue, "年m月d日")
End Function
※ 年月日の方であり得ない日付(平成1年1月1日など)を入れると本来の日付(昭和64年1月1日など)に変換される。
0274デフォルトの名無しさん
2012/02/19(日) 06:24:27.04>>269では誤動作するケースがある、というのは分かる?
経験があれば、真っ先に>>270-271のようなことが浮かぶもんだよ。
0275デフォルトの名無しさん
2012/02/19(日) 06:39:48.49「Excel 1年 元年」でググってみ。いろいろやり方があって面白いよ。
第1位に出てる、セルの表示形式を
[<32516]ggge"年"m"月"d"日";[>32873]ggge"年"m"月"d"日";"平成元年"m"月"d"日"
にしろってヤツ、いかにもExcel臭いがCool…なのかなw
自分的には、文字列にしてから置換する方が好きだ。
0276デフォルトの名無しさん
2012/02/19(日) 07:14:45.790277デフォルトの名無しさん
2012/02/19(日) 07:17:24.42VBAスレでセルの表示形式の回答?
0278デフォルトの名無しさん
2012/02/19(日) 11:10:34.97ExcelのVBAで自動で勤務を割り振ってくれる勤務表は作れますか?
0279デフォルトの名無しさん
2012/02/19(日) 11:11:32.23監視を任意のタイミングで終了させるにはどうしたらいいでしょうか?
0280デフォルトの名無しさん
2012/02/19(日) 11:19:38.11作れる。簡単ではないけど。
コツコツやって具体的にわかんない部分が出たらまた来ればいい。
>>279
終了フラグを用意して、DO〜LOOP前でクリアDO〜LOOP内でチェック。
終了ボタンなどで終了フラグを書き換える。
0281デフォルトの名無しさん
2012/02/19(日) 11:21:42.39Exit Do
0282279
2012/02/19(日) 11:30:53.47ループ中に終了ボタンって押せるんでしょうか?
UserFormにスタートボタン、終了ボタンを置いてテストしてるんですが、
ループ中は終了ボタンが押せません。
フォーカスを終了ボタンに移すこととかってできるんでしょうか?
ループ中でもボタンを押すにはどうすればいいんでしょうか?
よろしくお願いします。
0283デフォルトの名無しさん
2012/02/19(日) 11:35:10.73DO〜LOOP内、各行前後にDoEvents入れて見。
足りなそうなら増やして見。
0285デフォルトの名無しさん
2012/02/19(日) 16:29:31.340286デフォルトの名無しさん
2012/02/19(日) 18:01:02.400287デフォルトの名無しさん
2012/02/19(日) 18:45:33.02> 平成が何年までか求める
宮内庁から怒られるんじゃないのか…
0288デフォルトの名無しさん
2012/02/19(日) 19:17:04.080290デフォルトの名無しさん
2012/02/19(日) 19:52:21.66会社では2010、家では2003を使用して「終了」ボタンを押すと「終了」する
VBAを作成しています。Webページとして保存した場合、ボタンを押しても
起動しません。Webページとしてボタンを押せるようにするには
Sub ()
Dim rc As Long
rc = MsgBox("○○を終了しますか?", vbYesNo + vbQuestion)
If rc = vbYes Then
Application.Quit
Windows("ファイル名.xls").Close True
Else
MsgBox "いいえが選択されました。", vbExclamation
End If
End Sub
としてどこを変更すれば良いでしょうか?
0291デフォルトの名無しさん
2012/02/19(日) 20:16:12.70時代変わった? w
0292デフォルトの名無しさん
2012/02/19(日) 22:47:40.35With ActiveSheet.QueryTables.Add(Connection:=で、Web上のテーブルを取り込んだのですが、このテーブルの指定セルだけを取り込むにはどうすれば良いですか?
0293デフォルトの名無しさん
2012/02/19(日) 23:20:17.56勤務表作成なら興味があるので手伝ってもいいですよ
ただプロバイダが2ちゃんで書き込み禁止になることがよくあるので
書けるときだけですが
とりあえずググって見ましたか?
自分の業務で自分だけが使うのなら作りやすいのですが
自分の異動など他の人に業務を任せることも考えると
画面デザインが重要になりますね
0294デフォルトの名無しさん
2012/02/19(日) 23:25:53.88最近VBAを勉強し始めましたのですが、あるセルを基点(仮にA5)としてそこから左端にアクティブセルを移動した後、
仮にAA,AAAと言う文字が来たら、そのセルから右に5列の場所にaa、
BB,BBBと言う文字の場合はbbと言う文字を、それ以外の場合はメッセージボックスにccとでるようにして、
その後一行下に移動して、上記の作業を仮に10回繰り返していき、最後はA1にアクティブセルを移動させると言う問題があったのです。
それを変数を使って解くというようなことがあったのですが、
sub ()
Dim z As String , i As Integer
Range("A5").Select
For i = 1 To 10 Step 1
z = ActiveCell.Value
Select Case z
Case = "AA","AAA"
ActiveCell.Value="aa"
ActiveCell.Offset(0,5)
Case ="BB","BBB"
ActiveCell.Value="aa"
ActiveCell.Offset(0,5)
Case else
MsgBox"cc"
End Select
ActiveCell.Offset(1,0)
Next i
Range("A1").Select
End sub
としたのですが、うまくいきませんでした。どこが間違ってるのか自分ではわからなかったので教えて下さい
こんな初歩的な質問でスイマセン・・・
0295デフォルトの名無しさん
2012/02/20(月) 00:11:23.16OffsetはRangeオブジェクトを返すプロパティ…
とか言う以前に論理的に変だよ
プログラム知らない人でもこんなコードは書かない
ActiveCell.Offset(0,5).Value="aa"
とか
ActiveCell.Offset(0,5).Value="bb"
とか
ActiveCell.Offset(1,0).Select
として見れば?
0296278
2012/02/20(月) 00:25:03.13ホントですか!?
ありがとうございます
色々ググって見て、とりあえずデザインから作り始めてます
自分が使うだけなので特に問題ないです
複雑だから結構難しそうですね・・・
0297デフォルトの名無しさん
2012/02/20(月) 00:38:53.21>自分が使うだけなので特に問題ないです
仕事に使うならこの考え方はないです
エンドユーザコンピューティングの典型的な悪いところ
業務にVBAを使う以上、他の人が使えることが最低条件です
0299デフォルトの名無しさん
2012/02/20(月) 01:13:25.65エンドユーザーコンピューティングでやりがちなミス
・ 変数等の名づけが行き当たりばったり
・ 変数等の用途が途中で変わっても名前を放置
→ 名づけのルールを決めて、それに従う。もしずれたら補正する。
変数やSub、Functionの名前がバラバラだとソースを見る時、一々定義を確認しなきゃならない。
自前のルールで決めて、それに従ってればわりと見やすくなる。
・ 設計の時に考慮した事・あえて無視した事を書き残さない
→ メモ書きの内容も含めてあとで読んでもわかるように資料化する
資料がないと、バグが発生した時に考え方のバグなのかプログラム化する段階でのバグなのか切り分けが大変。
・ 資料を作っても読み返さない
→ 資料化したものは月に1回ぐらいは読み返してみよう。
慣れていないと、必要な事が抜け落ちた資料になったりする。
・ 必須機能や各種条件などを決める前にプログラミングを始める
→ 少なくとも基本方針、前提条件、などはプログラミング前に資料にまとめよう。
固定で必須な条件と、人数の増減などで変更が発生する条件ぐらいは切り分けてからプログラミングした方が楽。
・ 同じことの繰り返しを何か所にもコピペ
→ 同じことはFunctionやSubにまとめてそれを呼び出す。
ミスがあった場合それもコピペで増えるので、ソース内でのコピペは可能な限り避ける。
方針メモ出来たらうpしてみ。
0300278
2012/02/20(月) 07:57:10.04そんなに色々あるのですか・・・
これ教えてもらってないと大変なことになってました;
とりあえず基本方針?と前提条件をまとめてみます
0302278
2012/02/20(月) 09:49:16.54・人によってできる勤務が異なる(夜勤1は出切るが夜勤2は出来ない等)
・夜勤はなるべく連続しないようにする(夜勤、明け、休み、夜勤・・・)
・早番がすぐに来ないようにする(早番、日勤、休み、早番)
・前月の夜勤の明け、明け休みも考慮する。早番も
・希望休、希望勤務を入力できるようにする
・同じ番号の勤務はなるべく続かないように
・休みも偏らないようにする
・勤務は各回数入力できるように(休みも9回の時などあるので入力)
もっとある気がしますが、この時点で凄く難しそう…
0303デフォルトの名無しさん
2012/02/20(月) 10:07:26.30ナーススケジューリング問題(ググれ)に匹敵するような要件の場合、勤務表を作成するのはすごく困難。
0304デフォルトの名無しさん
2012/02/20(月) 10:36:51.36最初から自動割振りするシステムは難しいから、
割振り入力してボタンを押すと問題がある割振りに色を付けるシステム
(夜勤連続だと赤、休み集中だと青など)
を作ってみたら?
0305デフォルトの名無しさん
2012/02/20(月) 13:05:17.31あんまりおどすなよ。
0306デフォルトの名無しさん
2012/02/20(月) 13:41:17.42落ち着け。
勤務表作成を新人に引き継ぐ感覚でまとめてみ。
それもおまいさんが急用でどうしても質問受けれない場合にどう引き継ぐか。
その感覚でまとめれば要件資料としてはそれなりになるはず。
「すごく困難」って言ってる人がいるけど、正攻法で1からやろうとすると困難かもね。
単純ロジックで乱数うまく使って種表作って、
補正が手詰まりになったら最初からやり直すプログラムにすれば、
表が完成するまでの時間はかかるけどなんとかなる。
0307デフォルトの名無しさん
2012/02/20(月) 14:10:35.11> 補正が手詰まりになったら最初からやり直すプログラムにすれば、
> 表が完成するまでの時間はかかるけどなんとかなる。
それ、いつ終わるの?
組み合わせ爆発、半端ないよ?
0308デフォルトの名無しさん
2012/02/20(月) 14:52:45.60仮に要件が固まったとしても、それを実現できるコードを書けるとは限らない。
汎用的なシフト勤務ソフトがそれほど出回ってないのは、それぞれの職場の都合が大きく異なるのということより、
やはりシフト勤務作成そのものが難しいからだと思う。
実際ナーススケジューリング問題でググればわかると思うが、正攻法では無理なのでGAによる解法がかなり
研究されてる。
0309278
2012/02/20(月) 16:18:27.47やっぱりそこが難点ですか困難なほどに;
引継ぎ感覚でもう少し具体的にまとめてみます
コード書くのはほとんど初心者で何から手をつけたらいいのか全然分からないですが…
少しずつでも頑張っていきます
0310デフォルトの名無しさん
2012/02/20(月) 16:35:41.36ボタンひとつで終われば楽っちゃ楽なんだけど
継続的に使えるプログラムを作成する労力と、1ヶ月のうち勤務表作成にかける労力を考えると
どうしてもアナログ入力になる。
>>309
つーか、この件に関しては引継ぎなんて考えるなよw
できる人ができる形でやればいいんだよ
どうせ素人が扱えば余計な動作やエラーで詰むし
そこそこ使える人ならそれなりのモノ作るんだから
0311デフォルトの名無しさん
2012/02/20(月) 19:27:43.39職場の勤務表を作るのが目的なんだから
とりあえず作成に必要な要件をもっときちんと書き出してみたらどうよ。
>>302の情報だけじゃ結局>>278にしか分からんじゃん。
たとえば勤務シフトには何種類あるのか、(明、早、日、夜1、夜2、休の6種類なのか?)
スタッフ何人いて各シフトにはそれぞれ何人割り振るのか、
そのうち何人がシフトに制約があるのか、etc.
具体的に書き出したらそこそこ何とかなるかも知れんのと違う?
まぁ現状で(手書きの状態で)どの程度満足できるシフトを作れてるのか
もわからんから、あんまり厳しい条件だと自動化は無理だろうけど。
0312デフォルトの名無しさん
2012/02/20(月) 20:33:52.13他業界の人に勤務表作成を依頼するつもりで説明してください
0313278
2012/02/20(月) 20:49:48.30・勤務は 早番、日勤、夜勤1、夜勤2、明け、休み、有給、研修
日勤は2番、3番・・・とあり多いときで(行事などの日)10番とかも
土曜、日曜日は4番、5番までなど少ないことが多い
平日は大体6番、7番以上まで欲しい(希望休が重なるなどで5番までのこともあり)
正職、パート、嘱託?や人により可能な勤務が違う
パートには休みを全部自分で指定する人もいたり。
一日の勤務で最低 早番、2番、夜勤1、夜勤2、明け*2、明け休み*2が正職か嘱託でいる
夜勤ではこの人とこの人は一緒にできない、がある
早番はやったら次の早番まで5日は間が欲しい
夜勤は基本連続しないように(夜勤、明け、休み、夜勤…無理ならOK)
先に勤務を希望している場合あり(早番、夜勤なども)
前の月の夜勤の明け、明け休みも考慮する
休み、同じ番号の勤務はなるべく連続しないように。偏りのないように
休みは基本月10回。月により前後することあり、又多い人もいる
とりあえずシフトに関することはこれくらいかな・・・
0314デフォルトの名無しさん
2012/02/20(月) 21:46:17.55セルに値を書き込むと、自動的に隣のセルにフォーカスが移動するみたいな
0315デフォルトの名無しさん
2012/02/20(月) 21:59:23.91あとは、希望勤務の登録かな・・・
0316デフォルトの名無しさん
2012/02/20(月) 22:10:25.86それをVBAでやりたいって事?
エンター押すと横移動はオプションで設定できる。
0317デフォルトの名無しさん
2012/02/20(月) 22:11:21.36だ・か・ら・他業種の人相手にその説明で理解できると思う?
何番ってのは人数なのか?だったらなんで
>早番、2番、夜勤1、夜勤2、明け*2、明け休み*2
って一番が居なくて2番が居るんだ?
これだと1日8人が必要ってことだが
>日勤は平日6番、7番以上欲しい
ってのはこの8人には含まれてないのか?
そもそもこのシフトを全部で何人で回してるんだ?
(これ一番重要かもしれない)
>>314
それ普通にエンター押せば次のセルに行くじゃん。
エンター押下で上下左右のどちらに行くかは
ツール=>オプション=>編集から
"入力後にセルを移動する" の "方向"で変えられる。
0318デフォルトの名無しさん
2012/02/20(月) 22:12:20.14VBAと関係なく、普通に移動するんじゃないの。
下方向か横方向かは設定次第だが。
0319314
2012/02/20(月) 22:25:10.40Private Sub Puts(s As String)
Dim r As Long, c As Long
r = ActiveCell.row
c = ActiveCell.Column
Cells(r, c) = s
Cells(r, c + 1).Select
End Sub
0320278
2012/02/20(月) 22:29:35.78早番=1番と考えていただければいいです
平日7番までというのは日勤者(2番〜7番の6人)です
今現在は正職が13人、嘱託が1人、パート2人、(関係ないけどお掃除さん1人)
ただ3月で正職と嘱託が1人ずつやめます
パスは vba です
これは勤務表
http://www.dotup.org/uploda/www.dotup.org2664409.jpg.html
勤務表の一番右になります
http://www.dotup.org/uploda/www.dotup.org2664415.jpg.html
これが当番表になります。
実際作りたいのはこっちで考えています
http://www.dotup.org/uploda/www.dotup.org2664419.jpg.html
0321デフォルトの名無しさん
2012/02/20(月) 22:29:39.190322デフォルトの名無しさん
2012/02/20(月) 22:36:30.41質問。
明けについて。夜勤明けの勤務なの?それとも明け休み?
それは夜勤と確実にペアなものなの?夜勤だけで明けがない場合もあるの?
0323デフォルトの名無しさん
2012/02/20(月) 22:44:58.89現状のままだと3月以降に条件を満たすのは無理
NSPがどうこう言う以前に延べ人数で考えたらすぐ分かる
まず一個目の画像から1日平均10人が勤務する必要があることがわかる。
つまり1ヶ月で延べ300人必要
対してスタッフは3月以降14人(16-2=14)、
この人たちが月平均10日休むってことは20日働くってことで
20*14=280人ってことで、300-280=20人 => ちょうど1人分足りない
ってことで、15人以上居ないとあなたの施設は回らない
0324デフォルトの名無しさん
2012/02/20(月) 22:45:15.43帳票付けるときに重宝する
TABキー使わずにテンキーとエンターだけで表の端まで行ったら先頭列の1行下に移動できるし
0325278
2012/02/20(月) 22:49:31.98夜勤は(夜勤、明け、休み)で1セットは確実です
明けが無いとかはないです
>>323
一応来年度に新しい職員が2人入るのと異動で何とかなるとは思いますが…
それでも厳しいのには変わりないんですよね
0326デフォルトの名無しさん
2012/02/20(月) 23:03:01.95資料をまとめなおしてみたよ。読んでみて違う所の指摘と、研修について月何回とか決まってるかとか、教えてプリーズ。
278番様向け 勤務シフト表入力支援システム要件書 (ドラフト)
1.職員の種類
正職、パート、嘱託などがあり。
人によって可能な「勤務」に違いがある。(パートは日勤3番以降のみ。)
2.勤務の種類
早番、日勤(2番〜10番)、夜勤1、夜勤2、明け、休み、有給、研修などがある。
同じ種類・番号の勤務(および休み)はなるべく連続しないように。偏りのないように。
最低限必要な1日の勤務人数は
早番、日勤(2番〜5番)、夜勤1、夜勤2、明け、明け、休み、休み
の11名。(休み2名は前々日の夜勤1、夜勤2。強制。)
3.早番
別名1番。
4.日勤
2番、3番・・・と(行事などの日)10番ぐらいまである
平日は大体6番、7番以上まで欲しい(希望休が重なるなどで5番までのこともあり)
土曜、日曜日は4番、5番までなど少ないことが多い
つづく・・・
0327デフォルトの名無しさん
2012/02/20(月) 23:03:49.825.夜勤
夜勤ではペアを組ませられない組み合わせがある。
夜勤は基本連続しないように(夜勤、明け、休み、夜勤…可能な限りにならないよう…)
前の月の夜勤の明け、明け休みも考慮する
6.明け
夜勤の翌日は自動的に入る。
7.休み
休みは基本月10回。月により前後することあり、又多い人もいる
パートには休みを全部自分で指定する人もいたり。
夜勤の翌々日は自動的に入る。
8.研修
− 未稿 −
9.有給
有給休暇。
-以上-
0328278
2012/02/20(月) 23:18:59.70>人によって可能な「勤務」に違いがある。(パートは日勤3番以降のみ。)
パートで3番ができない人もいます(一応)
休みは年間を通して計算しているので(年度始めには回数は決まっていますが)
9回だったり11回だったりします
休みが多い人というのはパートの人で、配偶者の給料から計算して入れているようです
研修は出張みたいな感じで、休みではないけど職場にはいないとなります
月に一度あるかないか(無いことのほうが多い)であっても一人だけです
0329デフォルトの名無しさん
2012/02/20(月) 23:43:30.361.職員の種類
正職、パート、嘱託などがあり。
人によって可能な「勤務」に違いがある。(パートは日勤3番以降※のみ。)
※ 人によっては日勤4番や5番しかできない。
2.勤務の種類
早番、日勤(2番〜10番)、夜勤1、夜勤2、明け、休み、有給、研修などがある。
同じ種類・番号の勤務(および休み)はなるべく連続しないように。偏りのないように。
最低限必要な1日の勤務人数は
早番、日勤(2番〜5番)、夜勤1、夜勤2、明け、明け、休み、休み
の11名。(休み2名は前々日の夜勤1、夜勤2。強制。)
3.早番
別名1番。
4.日勤
2番、3番・・・と(行事などの日)10番ぐらいまである
平日は大体6番、7番以上まで欲しい(希望休が重なるなどで5番までのこともあり)
土曜、日曜日は4番、5番までなど少ないことが多い
つづく
0330デフォルトの名無しさん
2012/02/20(月) 23:44:17.045.夜勤
夜勤ではペアを組ませられない組み合わせがある。
夜勤は基本連続しないように(夜勤、明け、休み、夜勤…可能な限りにならないよう…)
前の月の夜勤の明け、明け休みも考慮する
6.明け
夜勤の翌日は自動的に入る。
7.休み
正職、嘱託の休みは基本月10回。
月により前後することがある。(1年間の回数は決まっており、兼ね合いで調整。)
パートは人によって回数が違う。
パートには休みを全部自分で指定する人もいたり。
夜勤の翌々日は自動的に入る。
8.研修
出張による研修。多くても月1回1名程度。
9.有給
有給休暇。
0331デフォルトの名無しさん
2012/02/21(火) 00:13:58.53提案。
当面の目標は入力支援とし、下記の機能を実現。
1.条件に合わないモノを検出する機能
2.一意で決まるモノを自動入力する機能(夜勤→明け→休み)
3.コンボボックスによる候補での入力(条件によってソートする。)
この辺りが出来ればかなり楽になるんじゃね?
0332278
2012/02/21(火) 00:26:44.73まとめなおしていただいてありがとうございます
改めてまとめると自分でも分かりやすいですね
>>331
それくらいのほうがいいのでしょうか
やっぱり自動で作成はかなり困難ですかね…
0333331
2012/02/21(火) 00:45:10.26順番の問題だよ。
自動生成を作っても調整は必要になるんだろ?
まずは調整と入力を支援する機能を作る。
↓
休みの事前入力とかを作る。入力部分に連動させる。
↓
手動部分を少しづつ自動化。
こうすれば、途中段階のものでも活用できる。
最初から大風呂敷やると時間が無くなる一方で何も出来上がらないと思う。
0334デフォルトの名無しさん
2012/02/21(火) 00:53:59.72331ではないけど、
自動化は総当たりとかで頑張れば不可能ではないと思うけど融通がきかないと思う
ある人が骨折して2週間以上抜けてしまうとか
この二人組は両方新人なのでばらばらにしたいとか
都合で休みを振り返る人が結構いるとか
そういう例外までも自動化で対応するのはかなり困難
その点入力支援はそういった例外にも強い
自動化しても融通がきかないとまったく使えないシステムになりかねない
最初に入力支援を作って様子をみて、いけそうなら最初のシフト表を自動作成することを考えればいい
0335デフォルトの名無しさん
2012/02/21(火) 03:00:13.24表に希望の休みを入力して空いてるセルに人員マスターテーブルからランダムで勤務パターン取得
そしてアナログで手直しするのが一番早いんじゃね?
入力支援に関してはchangeイベントとVlookup使えばテンキーだけで行ける。
0336デフォルトの名無しさん
2012/02/21(火) 04:06:23.050337デフォルトの名無しさん
2012/02/21(火) 07:17:54.61当番表の構造が分からないので説明お願いします
0338278
2012/02/21(火) 07:22:49.41とりあえずはそちらから取り掛かろうと思います
>>336
すみません;こう長くお話しちゃお邪魔でしたね…
>>337
当番表の構造・・?
0339デフォルトの名無しさん
2012/02/21(火) 07:33:18.93わかりました
当番表は勤務表の縦横を入れ替えて
番号順に並べ替えたものなのですね
0340デフォルトの名無しさん
2012/02/21(火) 10:43:55.130341デフォルトの名無しさん
2012/02/21(火) 14:07:24.52あるテキストファイルの最終行から4行目(4行目だけ)の値を取りたいと考えております。
最終行取得はヤフー知恵袋にありましたのでこれを使おうと思います。
Do While Not EOF(1)
Input #1, MyString
cnt = cnt + 1 ’cnt=行数
Loop
Line Input では何行目とか言う指定はできないようで
どのように指定行を取るかが分かりません。
ググッたら「Line Input で空読み」という事までは分かりましたが
空読みの意味が分かりません・・・
ここから指定行を取得するにはどのようにすればいいのでしょうか?
0342デフォルトの名無しさん
2012/02/21(火) 14:34:53.26処理時間をあまり気にしないなら、配列
MyString(3) as string
を作って、ファイルの先頭から行を読むたびに0->1->2->3->0->1->...と保存していけば、
最も古いデータが最終行から4行目。
dim index as long
index = 0
Do While Not EOF(1)
Input #1, MyString(index)
index = index + 1
if index = 4 then
index = 0
end if
Loop
0343デフォルトの名無しさん
2012/02/21(火) 14:58:15.15勤務表の別スレを立てましたのでどうぞ
ExcelVBAで勤務表を作ろう
http://toro.2ch.net/test/read.cgi/tech/1329803312/
0344デフォルトの名無しさん
2012/02/21(火) 15:08:17.97ありがとうございます。
配列に入れるとは全く思いつきませんでした。
目から鱗が落ちる回答勉強になりました。
希望通りの結果が得られました。
ありがとうございました。
0346デフォルトの名無しさん
2012/02/21(火) 19:34:06.17表内で、ある列の書かれている文字ごとにその行の背景色を変えていくと言うマクロを
VBEでモジュールに書きたいのですが、イマイチイメージが浮かばなくどうしていいかわからない状況です
足の骨折で入院してて勉強が遅れてしまったので急いで追いつきたいのですが、
おそらく簡単であろうこんな問題もわからなくなってきた次第です・・・
変数を使用して、繰り返しの処理をし、RangeとCellsを使って解けと言われたのですが???と言う状況です
そこで初心者用のスレがあったら誘導願います
スレ違いでスイマセン
0347デフォルトの名無しさん
2012/02/21(火) 19:45:46.58スレはここでも良いと思うけど、Cellsを使ってループ処理をする、その方法は知ってるの?
For i = 1 to 100
If Cells(i,1)= "xxxx" Then
Cells(i,1)= 〜
End If
Next
みたいなさ
0348デフォルトの名無しさん
2012/02/21(火) 19:48:13.75もう解決してるので今更感が強いけど、
テキストファイルをエクセルで開いて下から4行目を取得する、
というやり方もできるよ
Test.txtを開くと仮定したらこんな感じ
Sub test()
Dim WB As Workbook
Dim I&
Dim Txt$
Set WB = Workbooks.Open("test.txt")
With WB.Sheets(1)
I = .Cells(.Rows.Count, 1).End(xlUp).Row
If I > 3 Then
I = I - 3
Else
I = 1
End If
Txt = .Cells(I, 1).Value
WB.Close
MsgBox Txt
End With
End Sub
0349デフォルトの名無しさん
2012/02/21(火) 20:07:58.96文字は何パターンあるのかな。
パターン数分の背景色が必要になるけど、何色でも良いの。
0350デフォルトの名無しさん
2012/02/21(火) 20:09:31.700351デフォルトの名無しさん
2012/02/21(火) 21:03:18.61このあたりを調べて使えるようになればできるよ。
最終行取得
繰り返し(for each〜next)
colorindex
entirerow
dictionary
0352346
2012/02/21(火) 21:26:45.65For〜Nextは勉強しましたので、その文はナントカわかります
>>349-350
大元が2種類あって、更にその片方が何種類か条件があるような感じです
ですので、背景色は6〜7色前後になりますが、色については指定がありましたので、
ColorIndexの後にその数字を入れていけば対応できます
>>351
残念ながらまだ基礎の方なのでColorIndex以外は習ってないですね・・・
今習ってる構文?といえば
思い出せるのは、If〜Then〜Else、For〜Next、Do〜Loop位ですね
347さんのでなんとなくなイメージは浮かびました
答えてくださった方々、ありがとうございました
とりあえずはもうちょっとネットで調べてみます
0353デフォルトの名無しさん
2012/02/21(火) 22:01:14.63Excel:2003 SP3
---
(略)
graph_name = ActiveChart.Name
graph_index = ActiveChart.Index
(略)
ActiveSheet.ChartObjects(graph_index).Activate 'エラーが発生する
(略)
---
例えば、graph_nameがGraph 3だったら、
ActiveSheet.ChartObjects("グラフ 3").Activate
とする事で、エラーが発生しなくなります。
解決策をご存知の方はぜひご教授願います。
0354デフォルトの名無しさん
2012/02/21(火) 22:25:34.74graph_index =ActiveChart.Parent.Index
0355デフォルトの名無しさん
2012/02/22(水) 10:41:53.09欄が全部埋まってる場合にも空白のメッセージボックスが出てきてしまうんですよね。。。
全て記入されている場合はメッセージボックスを出さない処理にするにはどうすれば良いのでしょうか?
0356デフォルトの名無しさん
2012/02/22(水) 11:48:31.30最後のmsgboxのところを
ifでよける。
0357デフォルトの名無しさん
2012/02/22(水) 15:04:52.84サンクス!
0358デフォルトの名無しさん
2012/02/22(水) 21:09:05.40if len(str)>0 then msgbox str
0359デフォルトの名無しさん
2012/02/22(水) 21:10:42.95end if
を
{
}
で書くのに慣れると、BASICはどうも読みにくくて仕方ない。。
まあ慣れの問題なんだけどさ
0360デフォルトの名無しさん
2012/02/22(水) 22:51:46.44初心者で悪いけど質問な
ユーザーフォームっての作ったんだけど
そこに入力された値ってのはどうやって得るんだ?
初心者なんだから丁寧に教えろよ
0361デフォルトの名無しさん
2012/02/22(水) 23:08:36.010362デフォルトの名無しさん
2012/02/22(水) 23:34:39.45Applicationオブジェクトから辿ると何となく分かるけど、
Msgboxのボタンを押すとか謎。
0363デフォルトの名無しさん
2012/02/22(水) 23:44:29.66オブジェクト名.Valueでよろし。。。。。
0364デフォルトの名無しさん
2012/02/23(木) 00:03:42.57なんだ、簡単だったな
あんがとよ!
0365デフォルトの名無しさん
2012/02/23(木) 01:18:57.32ユーザーフォームの右上の×をクリックしたときって
どういう動作をしているのでしょうか?
×でフォームを閉じたことを標準モジュールのプロシージャ
(そのユーザーフォームをShowしたプロシージャ)から知る方法ってありますか?
現在はPublicで宣言したBoolean変数とフォーム上のコマンドボタンを用いて
コマンドボタンをクリックしたら変数をTrueにしてからHideするようにしてます。
(×で閉じたらFalseだからそれで判断してます)
パブリック変数を使わないで×で閉じたことを知る方法があったら教えてください。
0366デフォルトの名無しさん
2012/02/23(木) 02:37:52.92標準で用意されているイベントハンドラでは知ることはできない
プロセスの終了方法を区別するには、×ボタンのクリックイベントをフックするぐらいしかないんじゃない?
ただしアプリケーションの作法としては終了方法を区別するような設計にするのはあまり良くないと思うけど
0367デフォルトの名無しさん
2012/02/23(木) 02:48:44.80ユーザフォーム内だと
UserForm_QueryClose
で処理できるんだけど
いっそのこと Xで終了出来なくしたら? だめかな?やっぱ
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
If CloseMode = 0 Then Cancel = 1
End Sub
0368365
2012/02/23(木) 03:32:51.89無理なのですか、残念です。
終了方法を知りたいというか、
ユーザーフォームと標準モジュール間でパブリック変数を介さないで
情報のやり取りがしたかったのです。
標準モジュール同士ならローカル変数でも引数で受け渡し可能ですけど、
ユーザーフォームには引数渡せませんよね?
標準モジュール側からLoadだけしておいて
フォームのオブジェクトに値を入れてShow
とか、
フォーム側からHideして標準モジュールに戻ってから
オブジェクトの値を取得とかは出来ますけど、
Hideしたときにどういう風にHideしたかの情報を
パブリック変数を使わずに取得できないかな?
ということが知りたかったのです。
(ぶっちゃけていうと「実行」と「キャンセル」の判別に使いたいのです。)
パブリック変数の使用以外に
フォーム上に不可視のオブジェクト(チェックボックスなど)を作っておいて
それをフラグに使うっていう手もありますが、
なんかスマートじゃないな、という気がしまして。
>>367
上に述べたとおり、×をキャンセルボタン扱いで使いたかったわけです。
残念ながら私の思うような方向では出来ないっぽいですけど。
ともあれ、お二方にお答えをいただけてとてもうれしかったです。
どうもありがとうございました。
0369365
2012/02/23(木) 03:49:06.68何らかの値を渡す方法っていうのは以下の3種類しかないです。
1.パブリック変数の使用
2.フォーム上のオブジェクトの値をHide後に取得する
3.フォーム内のプロシージャからワークシートのセルや
外部のテキストファイルなどに書き出しておく
これ以外に何か方法をご存知の方、教えていただけたら幸いです。
0370デフォルトの名無しさん
2012/02/23(木) 04:20:30.93普通標準モジュール側に通知用の関数用意しとかない?
ボタン押したときに呼んでやるの
0371デフォルトの名無しさん
2012/02/23(木) 04:41:55.92>それをフラグに使うっていう手もありますが
>フォーム上のオブジェクトの値をHide後に取得する
オブジェクト=コントロールだと思ってる?
普通は、フォームにパブリックな変数定義するんじゃないかな
まあ、パブリック変数を介してるのには違いないけど
0372365
2012/02/23(木) 05:58:09.38すごい!おっしゃるとおり出来ました。
今までフォームモジュールの中から標準モジュールのプロシージャをCallしたことがなかった
(引数も渡せないから、そんなことが出来ると思ってなくて試してもいなかった)ので、
やってみて目から鱗です。
これからはこの手でいきます。
ご指導どうもありがとうございました。
こんな感じで試しました。
[Module1]
Sub Test
Userform1.show
End Sub
Sub BtnClick
Stop '<=ここで止まった(つまりここにキャンセルの処理を書いておけばOK)
End Sub
[UserForm1]
Private Sub CommandButton1_Click
Call BtnClick
End Sub
>>371
どうもありがとうございます。
370さんにバッチリなお答えを教えていただいたので今後はそちらを使うことにします。
一応、オブジェクト=コントロールというか、
フォーム内のコントロールはオブジェクト(に含まれる)という程度の認識です。
コントロール以外で、フォーム内にオブジェクトがあるのかどうかは分かってないです。
0373デフォルトの名無しさん
2012/02/23(木) 12:29:19.07私がVBAで2時間位で完全自動化した時は泣いて喜ばれたし、作業無くなったお姉さんはキャビネの掃除とかして
時間潰そうとしてたけど2ヶ月後退職迫られた、プログラママジ害悪
0374デフォルトの名無しさん
2012/02/23(木) 12:44:53.20VBAでも2時間かかる作業を6時間で終わらせてしまう派遣のオネエさんが凄いのか、
どっちだかよくわからん話だな。
0375デフォルトの名無しさん
2012/02/23(木) 13:11:20.53コーディングが2時間だろ
0376デフォルトの名無しさん
2012/02/23(木) 13:19:41.89仕様のヒアリング1時間、コーディング30分、テスト30分だろ
0377デフォルトの名無しさん
2012/02/23(木) 13:33:33.99おネエさんの作業時間と対比するには
VBAのほうも処理に必要な時間を書くべきだろ。
もちろん、いくらなんでも人力の3倍前後にしか短縮できないってのは
ちょっとあり得ない話だから
コーディングにかかった時間なのだろうと推測はできるが
はっきりと明記されていない以上、
日本語としては前述のような解釈も十分可能だぞ。
0378デフォルトの名無しさん
2012/02/23(木) 13:42:16.29これを、作業時間2時間で完全自動化したと読めないのは、日本人じゃ無いか、IQ70以下くらいだと思うぞ。
日本人だしIQも高いというなら、それは単なる誤読、勘違いなんだから騒ぐな。
0379デフォルトの名無しさん
2012/02/23(木) 13:45:59.830380デフォルトの名無しさん
2012/02/23(木) 13:56:32.22柔軟な構造の言語だから省略された部分に何を補完するかでどうにでも取れるよ。
>私がVBAで2時間ぐらいで(作業が終わるように)完全自動化した。
という読み方だって、
その前段で述べられている人力での作業時間と対比をなすことから考えたら自然な解釈なんだよ。
っていうことがわからないなら
それこそ日本語を勉強し直した方が良いと思う
0381デフォルトの名無しさん
2012/02/23(木) 14:12:50.78余分な単語をそぎ落とすと「私が二時間位で自動化した」になるが、これでもまだ六時間かかる処理を
二時間位で終わらせるような自動化をしたと読むのか?
ちょっと、日本人とは思えない解釈だわ
0382デフォルトの名無しさん
2012/02/23(木) 14:28:14.55>VBAのほうも処理に必要な時間を書くべきだろ。
はぁ?
お前のべき論なんか聞きたくもないよ。
0383デフォルトの名無しさん
2012/02/23(木) 14:32:11.51(と、話を変な方向に広げてみる)
0384デフォルトの名無しさん
2012/02/23(木) 14:48:20.87自説に都合の良い省略の仕方をされても困る。
作業時間云々のものからそういう省略の仕方ができないってことと、
元の文章がどういう省略の仕方をした結果なのかは別次元の話だからね。
で、俺は単なるべき論で言ってるわけじゃない。
前後の文脈を合わせるという方向で考えたらそうなると言ってるだけで
そうでない解釈が間違いだとは言ってない。
むしろその論理を否定されているからそうでない解釈もありだと言ってるだけ、
先に持論を押し付けたのはどちらか、冷静に判断してほしいし、
そういう論法なら日本語能力云々とかIQ がどうとかも一個人の見解にすぎない話で
だれも聞きたいと思ってないのは御同様。
0385デフォルトの名無しさん
2012/02/23(木) 15:02:01.040386デフォルトの名無しさん
2012/02/23(木) 15:07:15.34そもそも省略なんかしてないし。
100人読んだら、お前以外の99人は作業時間が、と取るわ。
0387デフォルトの名無しさん
2012/02/23(木) 15:16:34.110388デフォルトの名無しさん
2012/02/23(木) 15:51:44.33あくまで個人の感想です
0389デフォルトの名無しさん
2012/02/23(木) 16:25:51.950390デフォルトの名無しさん
2012/02/23(木) 16:30:12.44逆ギレする馬鹿
0391デフォルトの名無しさん
2012/02/23(木) 16:42:03.300392デフォルトの名無しさん
2012/02/23(木) 18:27:11.41オマエさん、ちょっとズレてるよ
0393デフォルトの名無しさん
2012/02/23(木) 19:02:53.08言葉の勢いだけで無根拠に強気なこと言ってる人の議論なんだが、
無根拠の方はそれに気づいてないってのが哀しいな。
0394デフォルトの名無しさん
2012/02/23(木) 19:15:35.72いつぞやのDB馬鹿がまた暴れてんのか?
0395デフォルトの名無しさん
2012/02/23(木) 19:52:44.07ま、俺の主観ならあの文章なら作業時間2時間だな。俺があの文章かいて
実行時間が2時間だととられたなら書き方がわるかったと反省する
0396デフォルトの名無しさん
2012/02/23(木) 20:18:52.53>>373も、難癖をつけようとして失敗した>>374も、どっちもスレチ。
0397デフォルトの名無しさん
2012/02/23(木) 20:34:13.57職業訓練学校に通ってるんだけど、諸事情で1週間ほど休んで一昨日からまた通い始めたんです、
その間に溜まったプリントを消化してて最後の一枚で訳わかんなくなってしまったんです
For〜Nextのネストってのはなんとなく解ったんだけど、どう組み立てていけばいいのかわからなくなって先に進めなくなりました。
http://imepic.jp/20120223/735690
これなんですが、VBAに慣れた人には簡単すぎるかもしれませんがどなたか助けて下さい
0398デフォルトの名無しさん
2012/02/23(木) 20:59:33.99Sub TEST()
Dim i as 整数, j as 整数, k as 整数
For i = 1 to ワークシート数
For j = 6 To 12
For k = 2 To 8
With Cells(j, k)
If .valueが5000以上 Then
.フォント.色=青
ElseIf .valueが2000未満 Then
.フォント.色=赤
End If
End With
Next k
Next j
Next i
End sub
0399デフォルトの名無しさん
2012/02/23(木) 21:07:02.90訂正
With worksheets(i).Cells(j, k)
0400デフォルトの名無しさん
2012/02/23(木) 21:12:10.07ありがとうございます!
そうか・・・Nextの終了順番が間違ってたのもあったのか
これでナントカ追いつけそうです
0401デフォルトの名無しさん
2012/02/23(木) 21:57:48.700402デフォルトの名無しさん
2012/02/23(木) 23:01:09.21シートAに、2行ペア組のデータで、5万行まで埋まっています。
Dim strData(15) As String に2行のセルの値を配列に放り込んで、
シートBにパコパコ張り付けるのを全行ループしています。
だけど、必ずシートAのある行数のところで、オーバーフローとなって止まります。
別にその行のデータの型などが、特におかしいわけでは無いです。
(成功したデータをその行に貼り付けてもオーバーフロー)
もしかして、VBAで処理する行数の上限等の何か制約があるのでしょうか?
上限があるなら何か他の対策はあるのでしょうか。
それとも何か他の原因が考えられるのでしょうか?
よろしくお願いします。
0403デフォルトの名無しさん
2012/02/23(木) 23:07:53.13IntegerをLongにしてみたらどうでしょうか
0404デフォルトの名無しさん
2012/02/23(木) 23:19:15.10VBAじゃなくてExcel自体の行数の上限が65535行だけどそれは理解してるの?
Excel2007で100万行に拡張されたけど
0405デフォルトの名無しさん
2012/02/23(木) 23:25:17.485万行ってことだから問題ないんじゃないの?
0406デフォルトの名無しさん
2012/02/24(金) 00:06:59.575万行×8列を2万5千行×16列にしてるのかな?
0407デフォルトの名無しさん
2012/02/24(金) 01:04:56.91ってやったら、
Range("C1:C3")
なオブジェクトが取れると期待してたけど、
Range("C1")
の単一のセルなオブジェクトになった。
そう言うもの?何かへんなのか?
"A1:A3"は、結合してるセルなのだけど、何か関係ある?
0408デフォルトの名無しさん
2012/02/24(金) 03:41:06.42Offsetは左上の単一セルしか見ない
範囲を広げるにはResize
0409デフォルトの名無しさん
2012/02/24(金) 07:09:13.61ありがとうございました。intカウンターをLongで解決。
なんで32000行あたりの特定の数字でオーバーフローしちまうのかなぁ
0410デフォルトの名無しさん
2012/02/24(金) 07:28:41.30それぞれの型には範囲ってもんがある
基本的なことぐらい知ってれやれよ
http://www.geocities.jp/cbc_vbnet/kisuhen/hensuu.html
変数・定数(基礎編)
0411デフォルトの名無しさん
2012/02/24(金) 08:28:36.17実際にRange("C1:C3")になるぞ。
そっちのPCは呪われてるのか?
0412デフォルトの名無しさん
2012/02/24(金) 19:19:10.59>>407も
>"A1:A3"は、結合してるセルなのだけど、何か関係ある?
って書いてるけど、うちの環境で試しても
A1:A3が普通のセルならC1:C3を返すけど、
A1:A3を結合してるとC1だけしか返されなかったよ。
0413デフォルトの名無しさん
2012/02/26(日) 14:46:56.38ちょっと気になっていろいろ試してみた
ヘルプには
>指定された範囲からのオフセットの範囲を表す Range オブジェクトを返します。
とある
ここでの指定された範囲ってのは指定したRangeじゃないし、オフセットの範囲ってのもそのRangeの範囲じゃないってことらしい
問題は、結合セルに対してOffsetをとった場合
指定された範囲=結合セルという一つの範囲
オフセット基準=指定範囲の終了地点(右下)
だとみなされるようだ
A1:A3が一つの結合セルだった場合、Range("A1").OffsetもRange("A2").OffsetもRange("A3").Offsetも同じ動作をする
普通にOffset実装したらそういう動作しそうもないから、
わざわざ結合セルに対するOFFset動作は特別な動作するように実装されてるんじゃないかな
ということで、>>407そう言うものだと思われます
だれかこの動作の公式なドキュメントしってる?
0414デフォルトの名無しさん
2012/02/27(月) 00:59:22.80Excelファイルを読み取り専用で開いてるのを忘れて、
いざ保存しようとした時に読み取り専用だった事を思い出すって事ありませんか?
だったらセルのロックみたいに入力自体できなくすればいいじゃないかと
思ってはみたもののどうすればいいかわかりません。
読み取り専用推奨で保存したファイルを開いて
読み取り専用にするか訊いてきた時に"はい"の場合はセルのロック、
"いいえ"の場合はセルのロックを解除というマクロを組んでAuto_Openで動かしてみましたが、
どうも訊いてくるより先にAuto_Openが実行されているようでうまくいきませんでした。
読み取り専用で開くかどうかもマクロで組めれば解決するのかなと思いますが、やり方がわかりません。
どうにかならないでしょうか?
0415デフォルトの名無しさん
2012/02/27(月) 01:19:29.120416デフォルトの名無しさん
2012/02/27(月) 07:37:36.89B列のセルに"日本"を入力すると、
その該当するC列とD列のセルの値や文字列をクリアして斜線を入れたいのです。
例えば
B2へ"日本"を入力すると、C2〜D2のセルに入っている値・文字をクリアして
自動的に斜線を入れる、
同じく
B3へ"日本"を入力すると、C3〜D3のセルに入っている値・文字をクリアして
自動的に斜線を入れる、
といった感じです。
ここで
B2に対してはそれらの動作が上手くいくのですが
B3やB4以降の行に関しては上手くいきません。
例えばB3へ"日本"を入力するとC3〜D3のセル内容はクリアされずC2〜D2の値がクリアされてしまいます。
B4やB5以降に関しても同じくC2〜D2の値がクリアされてしまいます。
0417デフォルトの名無しさん
2012/02/27(月) 07:39:07.10一応マクロの文です。
おそらく相対参照の問題だと思います。
調べて試行錯誤しましたが上手いやり方がわかりません。
Excel2003です。
どなたかご教授お願いします。
Private Sub Worksheet_Change(ByVal Target As Range)
Dim r, trg As Range
Set trg = Intersect(Target, Range("B2:B14"))
If Not trg Is Nothing Then
For Each r In trg
If r.Value = "日本" Then
r.Offset(0, 1).Resize(1, 2).Borders(xlDiagonalDown) _
.LineStyle = xlContinuous
Range("C2:D2").ClearContents
Else
r.Offset(0, 1).Resize(1, 2).Borders(xlDiagonalDown) _
.LineStyle = xlNone
End If
Next r
End If
End Sub
0418デフォルトの名無しさん
2012/02/27(月) 07:47:41.48それはそうだろ、としか。
0419デフォルトの名無しさん
2012/02/27(月) 08:01:13.16でこのi,j,?を操作すれば
0420デフォルトの名無しさん
2012/02/27(月) 12:37:05.35r.Offset(0, 1).Resize(1, 2).ClearContents
で、いけたわ
こういうのわかりにくいから、
r.offset(0.1).clearcontents
r.offset(0,2).clearcontents
ってやってるわ。
0421デフォルトの名無しさん
2012/02/27(月) 16:29:03.11ありがとうございます。
削除する対象のセルを結合したセルにすると
「結合された一部のセルを〜」のエラーが出てダメになりましたが
r.Offset(0, 1).Resize(1, 2) = "" にすると大丈夫でした。
お世話になりました
0422デフォルトの名無しさん
2012/02/27(月) 18:00:44.53range(“b3“).numberformat=“hh:mm“
if range(“a1“)<>range(“b3“) then
としても差異は検出されないけれど、セルの内容全てを比較したい場合は、全プロパティ分のifを書いてやらんとあきまへんのどすか。
0423デフォルトの名無しさん
2012/02/27(月) 18:02:54.640424デフォルトの名無しさん
2012/02/27(月) 19:26:17.07range("b3").numberformat="#,##0;-#,##0"
値は両方とも100
この場合も違うと判定させたい?
0425デフォルトの名無しさん
2012/02/27(月) 23:40:37.48.value でも .width でも罫線でも、違いを検出したいんどすえ。
0426デフォルトの名無しさん
2012/02/28(火) 10:59:13.54自分で関数作るか、if文書くかしかなさげ
というか、プロパティカウントできないの初めて知ったわ
これ地味に不便ね
0427デフォルトの名無しさん
2012/02/28(火) 12:42:32.91ライブラリの参照設定をコード内で実行したいのですが、
同じ文を標準モジュールに書くとエラーが出ないのに
クラスのイニシャライズに書くと「中断モードでは実行できません」と
エラーメッセージが出ます(ただ参照設定の処理がなされます)
クラスのイニシャライズでエラーが出る原因など分かる方がいましたらご教授ください
以下コード:
Const DAOFileFPath As String = "C:\Program Files\Common Files\Microsoft Shared\DAO\dao360.dll"
ActiveWorkbook.VBProject.References.AddFromFile DAOFileFPath
0428デフォルトの名無しさん
2012/02/28(火) 21:31:31.36べつに普通に実行できるが
そのエラーメッセージの通り、中断モードのままやるからエラーになってるだけだろ
0429427
2012/02/29(水) 01:03:02.92もっと早く書き込みたかったのですが仕事で抜けられませんでした
イニシャライズでなくメソッドにしても同じエラーになったので
もしやと思い、クラスを新規作成して一からコードを手打ちしていったら
今度はうまく行きました
モジュールが壊れていたんだと思います
必ず通るはずのStopをスルーして、その先のMsgBoxが動いている時点で気づくべきでした
前にもこんなことがあって、別のモジュールに一から書き直したらやっぱり普通に動いた
そんな無茶な使い方してるわけじゃないのにな…
どうも失礼しました
0430デフォルトの名無しさん
2012/02/29(水) 02:44:05.36まあいいか
0431デフォルトの名無しさん
2012/02/29(水) 10:05:54.430432デフォルトの名無しさん
2012/03/01(木) 00:18:08.68商品名の入っているシートから、数学で言う所の和集合を取りたいと考えています
例えば、
A列 B列
1 CC TT
2 HH CC
3 TT E3
となっているようであれば、(CC、TT、HH、E3)を取り出して、できれば1セルに一つの名前という形で長く並べたいと考えています
Sub Test()
Range("F8").Value = Union(Range("A1:A3"), Range("B1:B3")).Value
End Sub
おそらくUnionを使うのかなと考えて、とりあえず1セルに一つの名前ということを考えずに書いてみたのが上のコードなんですが、
実行するとF8にはCCしか入力されません。これはどこが間違っているのでしょうか?
どなたかよろしくお願いいたします。
0433デフォルトの名無しさん
2012/03/01(木) 02:13:02.97Sub MultipleRange()
Dim rng1 As Range, rng2 As Range, myMultiRanges As Range
Worksheets("Sheet1").Activate
Set rng1 = Range("A1:A3")
Set rng2 = Range("B1:B3")
Set myMultiRanges = Union(rng1, rng2)
Dim i As Integer
For i = 1 To 6
Cells(10, i).Value = myMultiRanges(i).Value
Next i
End Sub
これだと重複ができるようなので、これやった後に重複チェックのコードを別にかければなんとかいけそうです。お騒がせしました
0434デフォルトの名無しさん
2012/03/01(木) 10:10:50.67Worksheets("test")の
Private Sub Worksheet_Activate()
UserForm1.Show
End Sub
と入れて Worksheets("test")のタブをクリックして表示させた時に
Userform1が立ち上がるのは確認したんですが、
ThisWorkbookのシートモジュールの
Private Sub Workbook_Open()
Worksheets("test").Activate
End Sub
としてブックの起動時にWorksheets("test")をアクティブにしても
Userform1が出てこないんですが、これはなぜ?
明示的に
UserForm1.ShowをWorkbook_Open()に入れればもちろんフォームが
出てくるんですけど、これではあまり意味がないような気がする
んですけど。
0435デフォルトの名無しさん
2012/03/01(木) 10:20:46.78ワークシートのActivateイベントは「他のシートから移動してきたとき」しかトラップされないから、
ブックを閉じるときにtestがアクティブな状態で保存されて、開くときに最初からアクティブだとトラップできてない。
試しにワークシートtest2を作って、それをアクティブにした状態で保存して開いてみ?
0436デフォルトの名無しさん
2012/03/01(木) 10:38:38.23ありがとうございますm(__)m
0437デフォルトの名無しさん
2012/03/01(木) 18:16:46.90あ 1
あ 1
を行を文字と数字に列を整えることは可能?
0438デフォルトの名無しさん
2012/03/01(木) 18:20:24.650439デフォルトの名無しさん
2012/03/01(木) 20:08:50.040440デフォルトの名無しさん
2012/03/01(木) 20:50:42.49家計簿を作成してまして収入と支出の差額を表の一番右下の
セルに表示させているのですがそのセルの数字が黒字(0以上)ならセルの背景を青
赤字(0未満)ならセルの背景を赤にしたいのですが上手くできません
そもそもVBAでは不可能なので素直に条件式書式設定を毎回
使用したほうが良いのでしょうか?
0441デフォルトの名無しさん
2012/03/01(木) 22:14:39.940442デフォルトの名無しさん
2012/03/02(金) 00:09:42.412007では、「ファイル」→「オプション」で「開発タブをリボンに表示する」が
出て来るのですが。
0443デフォルトの名無しさん
2012/03/02(金) 00:15:51.44可能でしょうか?
0444デフォルトの名無しさん
2012/03/02(金) 00:20:12.40おや?
0445デフォルトの名無しさん
2012/03/02(金) 00:23:55.720446デフォルトの名無しさん
2012/03/02(金) 01:38:50.37ファイル→オプション→リボンのユーザー設定→開発にチェック
0447デフォルトの名無しさん
2012/03/02(金) 12:51:59.64どうすればいいでしょうか?
マクロに記録してから中身を見ようと思ったのですがVBAにはマクロの記録がなくて、ググっても
RGBの値を直接代入する例ばかりでよくわかりませんでした。
よろしくお願いします。
0448デフォルトの名無しさん
2012/03/02(金) 13:03:47.62自分でユーザーフォームで1から作るか、WinAPIを使って自分で実装するしかない。
お好きな方で。
0449デフォルトの名無しさん
2012/03/02(金) 13:16:57.63ありがとうございます。
自作することにします。
0450デフォルトの名無しさん
2012/03/02(金) 13:54:58.28sed -i s/hello/こにゃにゃちわ/g *.[ch]
cc *.[ch]
相当。export、import手作業は嫌です。
0451デフォルトの名無しさん
2012/03/02(金) 14:04:19.91自分でやるなら、VBComponent.CodeModule.ReplaceLine使え。
0452デフォルトの名無しさん
2012/03/02(金) 14:08:57.190453デフォルトの名無しさん
2012/03/02(金) 18:23:02.196〜10個めはそれぞれ独自のイベントにしたい場合はwitheventのプロシージャーの
中で判断するしかないですか?
0454デフォルトの名無しさん
2012/03/02(金) 18:41:09.43ありがとう。
var=VBComponent....Lines(...)
replace(var,“hello“,“こにゃにゃちわ“)
VBComponent....Lines=var
みたいにして絶望していた。
>>452
もう一歩教えてくだsあ。
アドインにReplaceLine()なりを書けという意味? アドインにサブルーチンの置換プラグイン相当の機能があるという意味?
0455デフォルトの名無しさん
2012/03/03(土) 16:16:57.97Sub pare_print()
Dim i As Integer
For i = 2 To Sheets.Count
Worksheets(Array(i, i + 1)).PrintOut
i = i + 2
Next i
End Sub
できません・・・なんででしょう??(´Д⊂ヽ
プリントアウト始めのシートは2番目からです。。
0456デフォルトの名無しさん
2012/03/03(土) 16:22:32.24今はシート上に重ねて表示させているのですが表示場所をずらしたい時とか、全体に
拡大縮小したい時にどうすればいいかわからず、ユーザーフォーム上ならユーザーフォームを
移動、拡大縮小することによって簡単にできるかなと思ったのですが、ググっても情報がないみたいで。
よろしくお願いします。
0457455
2012/03/03(土) 16:26:48.45最初のシート名は、0だったようです。できました。
0458デフォルトの名無しさん
2012/03/03(土) 17:14:23.39顕正新聞 平成24年2月5日号「原発全廃特集号」
原発は日本を滅ぼす、即時全廃せよ
人のDNAを破壊、国土を居住不能にする
代替は天然ガス・コンバインドサイクルで十分
惨禍もたらすを知って推進するは犯罪
ttp://d.hatena.ne.jp/kensho01/20120208/1328718592
0459456
2012/03/03(土) 20:56:39.14OS:BeOS Release4 (intel版です。PowerPC版ではありません )
バージョン:Gobe Productive 1.1
引き続きよろしくおねがいしますm(_ _)m
0460デフォルトの名無しさん
2012/03/04(日) 10:36:07.81A1-A50にランダムで指定の文字列もしくは空白が入ります。例えばリンゴ、ミカン、etcで、それぞれリンゴ...001、ミカン...050のようにあらかじめ対応する数字が割り振られています。
この文字列、つまり数字を条件に処理したいのですが、この場合A1から順に判定するよりも、A列から抽出して重複と空白を除外し、その結果を例えばB列に貼り付けて、B1からB?の空白まで処理をくり返すのが良いと思うのですが、どうでしょうか。具体的にどう書けば良いですか?
0461デフォルトの名無しさん
2012/03/04(日) 10:41:38.47B列に貼り付ける処理が無駄
FOR EACH でA列のRANGEを処理しながら回せばよろし
0462デフォルトの名無しさん
2012/03/04(日) 10:57:16.47RANGEが固定ではない場合の上手い方法ありますか?適当に下まで引っ張ればいいですか?
0463デフォルトの名無しさん
2012/03/04(日) 11:12:33.48A列に指定の文字列ランダムに配置
B1-B50に指定の文字列
C1-C50に指定の文字列に対応する数字
があるとして、A1から順番に対応する数字をMsgboxで表示していくコード誰か書いてくれぉ
0464デフォルトの名無しさん
2012/03/04(日) 11:18:31.630465デフォルトの名無しさん
2012/03/04(日) 11:33:29.98A1からセル内の数字だけ取り出すにはどうすればいいですか?
漢字/12345\/
という形式から
12345
を取り出したいです
漢字は1-5文字のランダムなので、LEFTは使えないです
数字は5桁固定で必ず\の前です
0466デフォルトの名無しさん
2012/03/04(日) 11:35:50.15for i = 1 to 最終行
最終行の取得はお好きにどうぞ
0467デフォルトの名無しさん
2012/03/04(日) 11:38:22.77正規表現でもLikeでもお好きにどうぞ
0468デフォルトの名無しさん
2012/03/04(日) 12:24:26.18For Each c In Worksheets(imacat).Range("A1:A100")
If c.value Like "*##*" Then
Msg:
MsgBox "cである"
End If
Next c
ここまで出来た…
0469デフォルトの名無しさん
2012/03/04(日) 12:27:05.40MsgBoxにマッチした数字を表示したいのですけどできません
0470デフォルトの名無しさん
2012/03/04(日) 12:44:36.54AHO
0471デフォルトの名無しさん
2012/03/04(日) 12:51:45.210472デフォルトの名無しさん
2012/03/04(日) 13:00:32.310473デフォルトの名無しさん
2012/03/04(日) 13:12:38.41instrで/と\の位置を探してmid関数を使えば?
0474デフォルトの名無しさん
2012/03/04(日) 13:19:10.28Sub Test()
Const s = vbKeyLButton: Const e = vbKey2: Dim vlookup: Set vlookup = Application
Dim i: For i = s To e:
Dim v: v = Evaluate(Chr(vbKeyF7) & Chr(vbKeySeparator) & Chr(vbKeyDivide) & Chr(vbKeyDivide) & _
Chr(vbKeyAdd) & Chr(vbKeyF6) & Chr(vbKeyF1) & Chr(vbKeyDown) & Chr(vbKeyNumpad1) & i & _
Chr(vbKeySnapshot) & Chr(vbKeyNumpad2) & s & Chr(vbKey9 + 1) & Chr(vbKeyNumpad3) & e & _
Chr(vbKeySnapshot) & Chr(vbKey2) & Chr(vbKeySnapshot) & Chr(vbKeyNumpad6) & Chr(vbKeyNumpad1) & _
Chr(vbKeySeparator) & Chr(vbKeyF4) & Chr(vbKeyNumpad5) & Chr(vbKeySelect))
' VLOOKUPで数字をMsgBoxで表示する
vlookup.OnTime Now() + TimeValue(Chr(vbKey0) & Chr(vbKey9 + 1) & Chr(vbKey0) & Chr(vbKey9 + 1) & i), _
Chr(vbKeyRight) & Chr(vbKeySubtract) & Chr(vbKeyNumpad2) & Chr(vbKeyDown) & IIf(IsError(v), String( _
vbKeyRButton, Chr(vbKeyPageDown)), v) & Chr(vbKeySelect) & Chr(vbKeyRight)
Next
End Sub
Sub MB(v): MsgBox (v): End Sub
0475デフォルトの名無しさん
2012/03/04(日) 13:31:13.08かえせるべ
正規表現のほうが楽だけど
str= "あいうえお12345"
strlen= len(str)
for i =1 to strlen
cha= mid(str,i,1)
if cha lile "[0-9]" then
c= c &cha
end if
next
0476デフォルトの名無しさん
2012/03/04(日) 13:35:24.620477デフォルトの名無しさん
2012/03/04(日) 13:48:13.13dim a
a=instrr(cells(1,1),"\")
msgbox mid(cells(1,1),a-5,5)
が簡単だと思うけど。
0478デフォルトの名無しさん
2012/03/04(日) 13:54:17.430479デフォルトの名無しさん
2012/03/04(日) 13:57:27.36可視セルをどう使いたいかによる。
0480デフォルトの名無しさん
2012/03/04(日) 14:04:24.13http://toro.2ch.net/test/read.cgi/bsoft/1329913579/161-
0481デフォルトの名無しさん
2012/03/04(日) 14:23:38.72どうすればよいのでしょうか?
0482デフォルトの名無しさん
2012/03/04(日) 14:35:08.42これにしたthxx.
0483デフォルトの名無しさん
2012/03/04(日) 14:36:48.77For〜Nextで順番に代入
作業列を使ってもいいんなら一ヶ所に固まるようにセル範囲をコピーしてからVariant型に代入
B列を削除して配列にコピーしてからアンドゥ
0484デフォルトの名無しさん
2012/03/04(日) 14:37:11.44dictionary使うとか
set dic = createobject("scripting.dictionary")
for i = 1 to 3
dic add cells(i,1)value, cells(i,3).value
next
for i =1 to 3
cells(i,5).value=dicitem(cells(i,4).value)
next
set dic=nothing
0485デフォルトの名無しさん
2012/03/04(日) 17:36:55.88連結されているセルにデータがあるものとして判定するにはどうすれば良い?
例えば、文字列がE1とF1をまたいでいる。セルが結合されているとき、F1にValueしても空だが、データがあるものと判定したいです。セルの結合数はランダムです。
0486デフォルトの名無しさん
2012/03/04(日) 17:45:29.930487デフォルトの名無しさん
2012/03/04(日) 19:11:15.60>>484
ありがとうございました
0488デフォルトの名無しさん
2012/03/05(月) 13:07:02.09A1-A100に、空白セルもしくは"abc"のセルがあるとき、その行を削除したいのですが、
Dim c As Range
For Each c In Range("A1:A100")
If c.Value ="" Or c.Value = "abc" Then c.Rows.EntireRow.Delete
Next c
とすると、1度目の処理で空白行が消えて、もう一度処理するとabc行が消えます。なぜこの記述はダメなのか?一度の処理で済ますにはどう書けば良いですか?
0489デフォルトの名無しさん
2012/03/05(月) 13:28:54.49↓
If c.Value ="" Or If c.Value = "abc" Then c.Rows.EntireRow.Delete
0490デフォルトの名無しさん
2012/03/05(月) 14:05:09.360491デフォルトの名無しさん
2012/03/05(月) 14:11:45.74ごめんアホなこと書いた
セルを消去してるので、セルが上に繰り上がってる
A2のセルを消去したらA3のセルがA2に繰り上がるので、そのセルは評価されない。
for each じゃなくて
for i =100 to 1 step - 1
A100から 減算させて評価させればいい。
つかstepとか忘れてて ぐぐったわ・・
0492デフォルトの名無しさん
2012/03/05(月) 14:29:25.31質問です、
for i 1 to 100
文字列&i
next
とするときiが一桁のとき01のようにして&したいのですが、書き方ありますか?
0493デフォルトの名無しさん
2012/03/05(月) 14:32:02.470494デフォルトの名無しさん
2012/03/05(月) 14:32:35.75For i = 1 To 100
str = str & Format(i, "00")
Next
0495デフォルトの名無しさん
2012/03/05(月) 14:38:43.950496デフォルトの名無しさん
2012/03/05(月) 17:41:04.96Access2000からExcelファイルを生成しています。
参照設定を Excel9.0 Objectlibrary へ設定しています。
生成先のExcelは2000だったり2003だったり、を想定しています。
以下のソースは動作します。
Function EXCEL_TEST1()
'事前バインディング 必ずEXCELへの参照設定が必要
Dim appWorld As Excel.Application
Dim wbWorld As Excel.Workbook
Dim Wksheet As Excel.Worksheet
Set appWorld = CreateObject("Excel.Application")
Set wbWorld = appWorld.Workbooks.Add
Set Wksheet = wbWorld.Sheets(1)
Wksheet.Cells(5, 5) = "カキコ"
LAST_CELL = Wksheet.Cells.SpecialCells(xlLastCell).Address
MsgBox LAST_CELL
wbWorld.SaveAs "C:\hoge.xls", FileFormat:=xlWorkbookNormal
appWorld.Quit
開放処理
End Function
0497496
2012/03/05(月) 17:41:43.26LAST_CELL(最終セルアドレス)の取得と、
SaveAsの部分が動作しません。定数の記述が異なるのか、そもそも実行時バインディング
では記述できないのかも分かりません。どなたか御教授お願いします。
Function EXCEL_TEST2()
'実行時バインディング EXCELへの参照設定が不要 ----------
Dim appWorld As Object 'Excel.Application
Dim wbWorld As Object 'Excel.Workbook
Dim Wksheet As Object 'Excel.WorkSheet
Set appWorld = CreateObject("Excel.Application") '生成
Set wbWorld = appWorld.Workbooks.Add 'ブック追加
Set Wksheet = wbWorld.Worksheets(1)
Wksheet.Cells(5, 5) = "カキコ"
LAST_CELL = Wksheet.Cells.SpecialCells(xlLastCell).Address
MsgBox LAST_CELL
wbWorld.SaveAs "C:\hoge.xls", FileFormat:=xlWorkbookNormal
appWorld.Quit
開放処理
End Function
0498デフォルトの名無しさん
2012/03/05(月) 18:03:38.27参照設定しないと
定数 xlLastCell や xlWorkbookNormal は
参照先で定義されているから使えないと思うぞ
自前で Const定義するか 定数値を指定するかどっちかしないと
0499496
2012/03/05(月) 19:26:17.24有難うございます。あまり参照設定とかは経験がないものですから、
何から手を着けてよいのか分からない状態です。
constする値を調べる方法があればよいのですが。
検索が下手なせいか、なかなか参考になるサイトが見つかりません。
0500496
2012/03/05(月) 19:34:55.74498様のヒントで、以下のサイトを見つけました。
ttp://park.geocities.jp/gdfsm000/jacob/jacob05.html
動かないところを片っ端から定数指定していきます。
有難うございました。
0501デフォルトの名無しさん
2012/03/05(月) 19:44:05.05With ActiveSheet.QueryTables.Add
使ってるときに、存在しないURL,空白のURLを打ち込んだときにExcelがフリーズしてしまいます。
どうするのがよいですか?
0502デフォルトの名無しさん
2012/03/05(月) 19:44:54.64空白のurl→空白ページのurl
0503デフォルトの名無しさん
2012/03/05(月) 19:53:56.57何故かVBAの言語仕様書が混じってるみたいだ。
FirstReleaseが2008年なのがなんともw
0504デフォルトの名無しさん
2012/03/05(月) 19:56:19.90office2010 32bitです
画像を複数枚選択して、なおかつそれらを40%の大きさにリサイズして取り込みたいのですが、どうしても上手くいきません。どなたかご教授お願いします。
0505デフォルトの名無しさん
2012/03/06(火) 00:23:45.390506デフォルトの名無しさん
2012/03/06(火) 03:47:59.25If A then
with B
Else
with C
End if
って動かないみたいなんだけど、他に方法ありますか?
0507デフォルトの名無しさん
2012/03/06(火) 03:53:58.23下にEnd With が続くとエスパーして
Dim target As Withで使う型、またはVariant
If A then
Set tartget = B
Else
Set tartget = C
End If
With target
処理
End With
0508デフォルトの名無しさん
2012/03/06(火) 03:57:21.74こんなに早く
どうもありがとうございます。
0509デフォルトの名無しさん
2012/03/06(火) 10:38:36.68望ましいのは、ボタンクリック等のイベントで撮影モードに移行し、撮影完了でEXCELに戻ってくるような操作方法です。
0510デフォルトの名無しさん
2012/03/06(火) 11:02:50.25コードの先頭行に空白行が1行追加されてるのは仕様ですか?
空白行を削除して保存しなおしても、また追加されてしまいます。
標準モジュールではそうなりません。
0511デフォルトの名無しさん
2012/03/06(火) 11:16:15.79shellかなんかで立ち上げてsendkeyで操作するとか
0512デフォルトの名無しさん
2012/03/06(火) 11:48:06.15途中経過を1000行ぐらい出力したら流れて消えてしまいました
0513デフォルトの名無しさん
2012/03/06(火) 20:00:16.74そんなこと考えてないで
さっさとテキストファイルに出力して
プログラムを進めてくれ
0514デフォルトの名無しさん
2012/03/06(火) 21:08:23.500515デフォルトの名無しさん
2012/03/06(火) 21:16:17.49完成したVBAマクロを試しに動かしたら、
何故かExcel巻き添えで落ちる呪いをお前にプレゼントしよう。
0516デフォルトの名無しさん
2012/03/06(火) 21:25:45.56immediate は、
広大な、恒久的な
という意味らしいな
0517デフォルトの名無しさん
2012/03/06(火) 21:42:45.76何ていう辞書?
0518デフォルトの名無しさん
2012/03/06(火) 21:55:00.87何だったかな
ロブスターとかだったかな
513に借りたんだけど
0519デフォルトの名無しさん
2012/03/06(火) 22:39:09.480520デフォルトの名無しさん
2012/03/07(水) 00:18:02.17一度に100行まで表示じゃなかったけか。
ちがってたらゴメン。
0521デフォルトの名無しさん
2012/03/07(水) 00:31:03.27元ネタがきになる
0522デフォルトの名無しさん
2012/03/07(水) 00:31:33.21>>519
「オートフィルタ カウント」 でぐぐればいろいろ出てくる
0523デフォルトの名無しさん
2012/03/07(水) 13:57:19.01それimmediateの意味とはちがくね?
immenselyとかimmensityの意味じゃね?
0524デフォルトの名無しさん
2012/03/07(水) 15:07:58.10直接の〜、とか 即時の〜 という意味だね。
形容詞だね。
ホントどうでもいいけど
0525デフォルトの名無しさん
2012/03/07(水) 20:33:40.70immediateはどうかんがえたって即って意味だろ
0526デフォルトの名無しさん
2012/03/07(水) 21:21:07.31閉じるボタンを押した時、必ずフリーズします。
何故でしょうか。
0527デフォルトの名無しさん
2012/03/07(水) 21:37:14.41ボタンを押した時に実行されるコードを何故貼らない
0528デフォルトの名無しさん
2012/03/07(水) 21:37:33.25壊れているのかもな
0529526
2012/03/07(水) 21:42:22.61セルをダブルクリックで呼び出すことにしていまして、
閉じるボタン押した時、セルが編集可能状態である為エラーが出るみたいです。
(ボタンで呼び出した場合は普通に閉じれました。)
コードの中身はなく、ひとまずフォームを作った感じです。
ダブルクリックでフォーム呼び出しはやるべきではないのでしょうか。
0530デフォルトの名無しさん
2012/03/07(水) 21:50:53.380531デフォルトの名無しさん
2012/03/07(水) 23:34:23.81まず変数aに1を代入し
DO LOOPの中でaを5にしました。
その後aを使うと元の1に戻っているのですが、
これは仕様ですよね?
この5という数値を使う方法はありませんか?
0532デフォルトの名無しさん
2012/03/07(水) 23:41:52.46仕様がないAH0
0533デフォルトの名無しさん
2012/03/08(木) 00:12:08.65>>531
とりあえずコード貼れ
0534デフォルトの名無しさん
2012/03/08(木) 00:19:44.48a = 1
Do
a = 5
Loop Until True
MsgBox a
0535デフォルトの名無しさん
2012/03/08(木) 00:22:36.75すみません。質問した者です。
変数に追加していくのではなく、
毎回上書きしていただけでした・・・
初心者でごめんなさい。
' Do
' If r = 1 Then
' Exit Do
' End If
' total = Cells(r, 4)
' r = r - 1
' Loop
0536デフォルトの名無しさん
2012/03/08(木) 00:56:45.28謎すぎるけど解決したなら、よかった
0537デフォルトの名無しさん
2012/03/08(木) 01:01:53.11中をIfとExitで制御している形はけっこう危険なんだよね。
思わぬ条件で抜けたり
一度も通らない経路ができたりする。
0538デフォルトの名無しさん
2012/03/08(木) 01:02:17.51=LEN(A2)
=LEN(A3)
みたいな値をB列にA列の終わりまで入れていくにはどうしたらいいですか?
For文で回すんでしょうか・・・?
データの最終位置を取得するのに、「End(xlDown).Row」と、「(Rows.Count, 1).End(xlUp).Row」
ってどう違うんでしょうか?
MsgBox "End(xlDown).Row : " & Cells(1, 1).End(xlDown).Row
MsgBox "(Rows.Count, 1).End(xlUp).Row :" & Cells(Rows.Count, 1).End(xlUp).Row
↑
を、マクロ開始前のセルの位置をズラして色々やってみても結果は同じでした・・・。
0539デフォルトの名無しさん
2012/03/08(木) 01:33:09.38Cells(1, 1).End(xlDown).Row は上から順番に見ていく
途中に空白があると、それより下のデータは無視される
Cells(Rows.Count, 1).End(xlUp).Row は下から順番に見ていく
最終行までびっちりデータが入っている場合を除いて、本当の一番下がわかる
0540デフォルトの名無しさん
2012/03/08(木) 01:45:52.43分かりやすい説明をありがとうございました。
で、
=LEN(A1)
=LEN(A2)
=LEN(A3)
みたいのを入れてくには、やはりFor文で回すのでしょうか?
0541デフォルトの名無しさん
2012/03/08(木) 02:04:48.60数十行程度ならForでもいいと思う
もっと大量にある場合はオートフィルの方がプログラムがすっきりするし処理スピードも速いはず
0542540
2012/03/08(木) 02:21:23.52ありがとうございます!
ググってみたところ、
Range("B1").AutoFill Destination:=Range("B1", Range("A65536").End(xlUp).Offset(, 1))
でいけるみたいです!この方が頭よさそうだし、スッキリ見やすいし、これでいきます!
おかげさまで安眠できます。
夜分遅くにお付き合いいただき、ありがとうございました!
0543デフォルトの名無しさん
2012/03/08(木) 21:37:27.17で、その行位置は範囲は
2行目からlastrow = Cells(Rows.Count, "A").End(xlUp).Row
までとしてこういう時
どういう風に Worksheet_Changeに書けばいいんでしょ?
0544デフォルトの名無しさん
2012/03/08(木) 22:20:58.13何がわからないの?
0545デフォルトの名無しさん
2012/03/08(木) 22:24:19.73何も考えずにやれば、こう
lastrow = Cells(Rows.Count, "A").End(xlUp).Row
For i = 1 To lastrow
If Cells(i, "P").Value = 1 Or Cells(i, "P").Value = 9 Then
Cells(i, 17).Value = Now
End If
Next
ただし、Worksheet_Changeでこれやっちゃうとループするので
違う所でやるか、変更箇所のチェックしてQ列なら変更しないとかの工夫が必要
0546デフォルトの名無しさん
2012/03/08(木) 22:26:58.87で、どう書けば良いのか?って聞いてんですけど
0547デフォルトの名無しさん
2012/03/08(木) 22:31:28.83>>545
ありがとうございます。
それを元にまた勉強してみます
0548デフォルトの名無しさん
2012/03/09(金) 00:27:00.69if
以下の3セルの内容が数字(全角・半角)でないとき
処理Aを行う
Sheet1.Cells(y, x)
Sheet1.Cells(y, x+1)
Sheet1.Cells(y, x+2)
else if
Sheet1.Cells(y, x)のみが数値(全角・半角)でないとき処理Bを行う
という処理を掛けたいです。
別の言い方をすると、セルが文字・全半角スペース・空の時に処理を掛けたいです。
If not と IsNumberで出来ると思いきや上手くいってません。
お願いいたします。
0549デフォルトの名無しさん
2012/03/09(金) 00:27:09.17cells(i,16)で書くよりCells(i,"P")で書いたほう
列が非表示だったら時便利ね!とか、関係ないことをオモタ
0550デフォルトの名無しさん
2012/03/09(金) 01:08:49.15a = StrConv(.Cells(y, x), vbNarrow)
b = StrConv(.Cells(1, x + 1), vbNarrow)
c = StrConv(.Cells(1, x + 2), vbNarrow)
End With
If IsNumeric(a) = "False" And IsNumeric(b) = "False" And IsNumeric(c) = "False" Then
処理A
End If
If IsNumeric(a) = "False" And IsNumeric(b) = "true" And IsNumeric(c) = "true" Then
処理B
End If
ベッタベタでよければ どうぞ。
0551デフォルトの名無しさん
2012/03/09(金) 01:15:04.82ありがとうございます試してみます!!
IsNumeric IsNumberの使い方もあまりわかっていなかったので助かりました。
0552デフォルトの名無しさん
2012/03/09(金) 02:42:06.08IsNumericはBooleanなんだが、なぜ文字列で判定する?
ちなみにIsNumericは、全角の数字でもTrueの判定するから、StrConvする必要はなかったりする
指数表記も認めたりするから、数字の定義によっては注意が必要
0553デフォルトの名無しさん
2012/03/09(金) 03:03:03.65””いらないね。あっても動くけど。
If not IsNumeric(a) And not IsNumeric(b) And not IsNumeric(c)
で書いてたんだけど、解りにくいかと思ってやった。
今は反省している。
全角の数字判定は知らんかったわ。便利ね。
ありがとう
0554デフォルトの名無しさん
2012/03/09(金) 23:40:36.420555デフォルトの名無しさん
2012/03/09(金) 23:51:09.950556デフォルトの名無しさん
2012/03/10(土) 00:40:01.350557デフォルトの名無しさん
2012/03/10(土) 01:21:54.250558デフォルトの名無しさん
2012/03/10(土) 16:17:05.72これが、72行ぐらいになって、シート数が159を超えたあたりから、シート追加の
「Copyメソッドが失敗しました」とエラーになります。
実際、そのブックでそれ以上シートを追加しようとしてもできません。
ググってみたところ、シート数に上限などはないようですが、メモリに依存するようです。
1枚1枚のシートは、それほど情報量はないのですが、Vlookup関数を多用してますので、
それもメモリを食っているかもしれません。
シート名も、平均22文字ぐらいあって、とても長いです。
一連のマクロは、一度も保存せずに、メモリ内だけで行っています。
データは、60行〜80行ぐらいまである時もあり、一括管理できるようにするため、
やはり1つのファイルに収めるのが理想的ではあります。。
どうすれば、このエラーを回避できるでしょうか?
0559デフォルトの名無しさん
2012/03/10(土) 17:53:10.370560デフォルトの名無しさん
2012/03/10(土) 18:26:11.05Excel2007 on Win7
シート毎の有効行やvlookupなど、少しずつ条件を変えて状況が変わるか試してみたら?
原因が特定できれば対処も考えやすいと思う
0561デフォルトの名無しさん
2012/03/10(土) 19:17:20.060562デフォルトの名無しさん
2012/03/10(土) 21:48:45.310563デフォルトの名無しさん
2012/03/10(土) 22:17:58.69257以上を指定したらCharactersクラスのTextプロパティを取得できませんってエラーが出るんです…
0564デフォルトの名無しさん
2012/03/10(土) 22:42:09.93うちの2007ではちゃんと動いてる
環境かけ
0565デフォルトの名無しさん
2012/03/10(土) 22:49:30.49Windows7 64bit版、Excel2010 32bit版です。。
0566デフォルトの名無しさん
2012/03/10(土) 22:52:16.010567デフォルトの名無しさん
2012/03/10(土) 22:53:02.680568デフォルトの名無しさん
2012/03/10(土) 22:54:11.13Textプロパティだとエラーが出てしまいます。。
やりたいことはTextプロパティを使わなくてもできるので別の方法考えてみます。
0569デフォルトの名無しさん
2012/03/10(土) 23:03:29.53Length=256なら本当にOKなの?
0570デフォルトの名無しさん
2012/03/10(土) 23:07:39.75MsgBox Range("A1").Characters(1, 256).Text
MsgBox Range("A1").Characters(1, 257).Text
の両方を試して256はOKでした
0571デフォルトの名無しさん
2012/03/10(土) 23:11:18.10うちは同じ環境だけど、エラーでない
0572デフォルトの名無しさん
2012/03/10(土) 23:15:31.25ですよねぇ・・・
今までもRange("A1").Characters(Start, Length).Textという書き方は何度もしてきたと思うし
こんなエラーに出会ったことがないので、たぶん私が何か見落としてるんだと思います。
もうちょっと調べてみます。ありがとうございました。
0573デフォルトの名無しさん
2012/03/10(土) 23:22:58.34今、ウインドウ枠の固定を使って、上から3行だけを固定で表示させるようにしています。
この固定部分にボタンを配置して、マクロを登録しようと考えています。
それで、ホイールを回せば4行目から下が上下にスクロールするわけですが、ホイールを
回して下に適当にスクロールさせて、固定部分のボタンを押す。
そうすると「画面に表示されている」上から4行目のセル番地を取得する。
そういうマクロを作成したいんですが、これは可能でしょうか?
すみませんがよろしくお願いします。
0574デフォルトの名無しさん
2012/03/10(土) 23:33:19.28MsgBox ActiveWindow.ScrollRow + 3
0575デフォルトの名無しさん
2012/03/10(土) 23:42:17.38おお!できた!
多分できないかなーと思ってたんで嬉しいです。
ありがとうございました。
0576デフォルトの名無しさん
2012/03/11(日) 00:33:01.82うちの2007でも、TextやCaptionを取得しようとするとエラーになるな
でも設定してもエラーにならずに正常に動く
Dim c As Characters
Set c = Range("A1").Characters(0, 260)
MsgBox c.Text 'ここでエラー
おかしいのはRange.Charactersメソッドじゃなくて
CharactersクラスのTextメソッドだな
エラーのMsgBoxの行を変えてテストした
c.Text = String(25, "W") 'これは正常に動作
c.Text = String(250, "W") 'これはエラーは出ないが動作してない
c.Text = String(256, "W") 'これはエラー
どうも怪しげな動作してるな
0577デフォルトの名無しさん
2012/03/11(日) 02:56:35.77Excelで
0578デフォルトの名無しさん
2012/03/11(日) 04:55:25.470580デフォルトの名無しさん
2012/03/11(日) 09:39:05.54フォームやそこに配置したコントロールのプロパティと
プログラムコードが1つのファイルに書かれているわけだが
インポートしたときにプロパティ領域とコード領域を分ける空行部分が
コードエディタ側に読み込まれるってだけの話だろ
0581デフォルトの名無しさん
2012/03/11(日) 09:45:34.73分かりやすい回答ありがとうございました。
0582デフォルトの名無しさん
2012/03/11(日) 10:09:37.71この前 outportしてそのままimportしたら、class moduleになったので、もうてっきり無理なんだと。。。
0583558
2012/03/11(日) 14:30:33.27ええと、業務用です。
取引先ごとに、表紙と帳票をセットにして、FAXするのですが、今までは帳票だけを
ガーッと保存もせずに、シート追加して作成するマクロがあって、別にFAXの表紙だけを
まとめたExcelファイル(取引先300件分のシートがあって、3,3Mくらいのファイル)
の中から、該当の取引先宛の表紙を探して、総FAX枚数や、帳票内の集計数なんかをちょちょっと
直して、印刷して、帳票とマッチングしてFAXしてたんですが、データ(取引先)が
72件もあると、結構2時間ぐらいかかる作業なんです。
この仕事を引き継いだ、元ヘタレPGの私としましては、なんとしてもマクロ化
しちゃいたい衝動にかられまして、FAX表紙は、ざっと3パターンしかなかったので、
取引先を一覧にして、表紙のテンプレに、Vlookup()で引っ張ってきて、
表紙と帳票とセットでシート追加するようにマクロを組んだんです。
そうしたらこのエラーです。
まあ、限界に挑戦するマクロだとは思うんですが、、元々の量の倍になってる
訳だし、、やっぱりファイルを分けるしかないのかな・・。
メモリを食ってる部分が、VlookUPなのか、シート名なのか、それともファイルを
保存してないせいなのか、ある程度でも分かれば、そこを対処してから、ファイルを
分ける方向で行こうかと思って質問させて頂いた次第です。
ひょっとしたらスレチかもしれませんが・・・。
0584558続き
2012/03/11(日) 14:31:55.26ちなみにファイルサイズは、2.3Mくらいです。
ここ↓
http://oshiete.goo.ne.jp/qa/3047947.html
で、詳しく説明して下さってる方がいるんですが、ここでいう、「配列数式」や
「揮発性(volatile)関数」ってのが何のことなのか、いまいち分かりません。。
VlookUPのことなのか?だとしたら、VlookUPをマクロでやってしまった方がいいんだろうか・・・
長々とすみません。お知恵をお貸しくださいますと幸いですm(_ _)m
0585デフォルトの名無しさん
2012/03/11(日) 14:38:02.97顧客名全部仮の名前にして、FAX表紙も適当なものに差し替えてファイルアップすれば
もっと具体的なアドバイスもらえるんじゃないかな
0586558
2012/03/11(日) 14:51:48.85ありがとうございます。
ファイルは会社にあるので、アップするとしたら明日以降になりますが・・・。
最初のシートに、全ファイルの目次を作って、目次から、各シートに飛べるように
ハイパーリンクを組んだんですが、ひょっとしたらそれがいけなかった・・・?
VBA初めてなので、ソース見ていただいた方がいいかもしれませんね。。
0587デフォルトの名無しさん
2012/03/11(日) 15:01:52.27OS、Excel、メモリ
0589デフォルトの名無しさん
2012/03/11(日) 15:56:09.31新しいExcelで,Excel2000のソートコードが動くでしょうか
使っているコードです
sh2.Range("e9").Select
Rows("11:45").Select
Selection.Sort Key1:=Range("A11"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod _
:=xlPinYin
sh2.Range("e9").Select
0590デフォルトの名無しさん
2012/03/11(日) 16:18:23.96動くよ
0591デフォルトの名無しさん
2012/03/11(日) 16:38:44.83ほんとにありがと
0592デフォルトの名無しさん
2012/03/11(日) 16:45:48.72微妙にスレチっぽくて恐縮なのですが…
ExcelからADOでAccess2010ファイルに接続したいのですが
udlファイルを作成して、ダイアログでProviderとData Sourceを指定、接続テストも通るのに、
いざ次のコードでそのudlファイルを指定するとエラーになります
([ODBC Driver Manager]データソース名および指定された既定のドライバが見つかりません)
原因分かる方いますでしょうか
ADODBCon.Open UDL01_fPath
またExcelVBAでudlファイルのProviderの値の取得方法ってあるのでしょうか?
Data Sourceの値は以下のコードで取得できたのですが、Provider値の取得方法が分かりません
以下のコードでData Sourceの部分をProviderに置き換えてもエラーに
With CreateObject("ADODB.Connection")
.ConnectionString = "FILE NAME=" & UDL01_fPath
DB_FPath = .Properties.Item("Data Source").Value
End With
以下、udlファイルの中身です
[oledb]
; Everything after this line is an OLE DB initstring
Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\test\DB\Database1.accdb;Persist Security Info=False
0593デフォルトの名無しさん
2012/03/11(日) 16:57:24.25UDL01_fPath ’udlファイルのフルパス
udlファイルにアクセスする前に、udlのData Sourceに格納されたDBファイルの
存在チェックを入れており、その部分ではエラーがないので、
Providerの指定でエラーが起きてると思うんですが分かりません
最初はudlファイルのProviderとData Sourceの値をコード内で指定していたのですが、
その時はエラーはありませんでした
その時の値とをテキスト上にコピーして文字列を比較しても差異はありませんでした
0594デフォルトの名無しさん
2012/03/11(日) 19:42:42.20なんか良くわからんが、たぶん
ADODBCon.Open "FILE NAME=" & UDL01_fPath
MsgBox ADODBCon.Provider
0595デフォルトの名無しさん
2012/03/11(日) 19:59:57.96ありがとうございます!!
うまくいきました
こんな見落としで何時間も浪費していたなんて自分が情けない
0596デフォルトの名無しさん
2012/03/12(月) 16:09:38.74ユーザーフォームにボタン表面の色を変えたものを複数並べる
ことによって色を選ぶようにしました。
ボタン一つ一つのクリックイベントにコードを書いたのですが、
イベントの共有やどのボタンが押されたかを識別することによって
コードを簡素化したいのですが、VBAでそういったことは可能でしょうか?
ググったのですが、ブックの共有などの情報ばかりで検索しきれなかったので、
どなたか教えてください。
よろしくお願いします。
0597デフォルトの名無しさん
2012/03/12(月) 18:41:11.310598デフォルトの名無しさん
2012/03/12(月) 19:51:06.54データの入っている有効セル全てをコピーするにはどうすればいいでしょうか?
0599デフォルトの名無しさん
2012/03/12(月) 20:13:22.36for nextの後にcallでquerytable.addすると処理固まってしまうのですが、どうすれば良いですか?メモリとかバッファとかよくわかりません
0600デフォルトの名無しさん
2012/03/12(月) 20:17:12.27VBAで32bit符号無し演算をしたいんですが、型がlongじゃダメです。(当然)
どんな技を使えば良いですか?
0601デフォルトの名無しさん
2012/03/12(月) 21:01:49.30Part17で似た質問をして、カラーパレットをクラスモジュールを使って作成したことがあります。
できてはみたものの、クラスモジュールはよく分かりませんでした。
VBやC#なら、どのイベントにどのプロシージャを結びつけるかをプロパティウィンドウで
簡単に設定できるようになっています。
VBAではそういう使い方は向いていないのではないか、と思います。
0602596
2012/03/12(月) 21:49:46.96ありがとう。
Application.Callerをググったら、どの例もシート上のボタン等を調べるみたいで、
ユーザーフォーム上のボタンのクリックイベントでは使えないみたいです。
ttp://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1427920774
ここを見ても、601さんが書かれているように気軽にできる感じではなかったので、
ボタンのtagプロパティにカラーコードを書いておいて、activecontrolで識別するようにしました。
0603デフォルトの名無しさん
2012/03/12(月) 23:05:54.84Long型でユーザー定義変数を作成し、
LSetステートメントで強制的に2つのLong型に分割。
2つのLong型を下位32bitと上位32bitで別々に計算し、
計算後に改めてCurrent型にLsetステートメントで合体。
という方法がある。
「VBA currency型のビット演算」でググるとよろし。
0604デフォルトの名無しさん
2012/03/13(火) 12:18:48.28ちょーthx.
0605デフォルトの名無しさん
2012/03/13(火) 19:30:37.29bookname = "D:\data\backup\data_xxxxxxxx.xlsx"
xxxxxxxxxx は作業日付
Worksheets("data").Copy
With ActiveWorkbook
.SaveAs Filename:=bookname
.Close
End With
としてdataシートを別ブックに保存しようとすると、このシートには
Activateになった時に作業をするモジュールがついていて xlsxでは
保存出来ないとExcelに言われてしまうんですが。。。
保存する際にモジュールは要らなくデータだけで良いんですけど
どうすればモジュールを切り離して保存出来るんでしょうか?
0606デフォルトの名無しさん
2012/03/13(火) 19:41:52.71今、手元にExcel2010が無いんで自信ないけど、
.SaveAs Filename:=bookname, FileFormat:=xlOpenXMLWorkbook
とかでどうだろ?
明日会社行けば試せるんだけど・・・
0607605
2012/03/13(火) 19:59:10.22出来ました。
そのFileFormat指定は初めてです。
ありがとうございます。m(__)m
0608デフォルトの名無しさん
2012/03/13(火) 20:32:15.030609デフォルトの名無しさん
2012/03/13(火) 20:36:33.610610デフォルトの名無しさん
2012/03/13(火) 20:43:21.740611デフォルトの名無しさん
2012/03/13(火) 21:55:34.65DeEvents
0612デフォルトの名無しさん
2012/03/13(火) 22:05:09.05Excel:2003
条件を満たした場合、ソースコード自体を書き換える事は可能でしょうか?
0613デフォルトの名無しさん
2012/03/13(火) 22:24:36.95Application.DisplayAlerts = False
でいいんじゃないのか
0614デフォルトの名無しさん
2012/03/13(火) 22:29:45.74できるけど、OSやExcelのバージョン違いに対する対応なら
#If〜#Then〜#EndIfや#Constの条件付きコンパイルを使うほうがよい。
どうしても書き換えしたいなら、参照設定で
「Visual Basic for Applications」に参照設定をすれば
VBEのコードそのものを直接VBAで動かせるようになる。
0615デフォルトの名無しさん
2012/03/13(火) 22:35:10.19Application.DisplayAlerts = False
↑
これは単にメッセージ出すのを抑制するだけですよ?
0616デフォルトの名無しさん
2012/03/13(火) 23:37:57.80xlsxで保存したらマクロは保存されない
警告なしで保存できるんだからそれでいいだろ
0617デフォルトの名無しさん
2012/03/13(火) 23:53:25.53なるほど。そういう手もあったんですね
0618デフォルトの名無しさん
2012/03/13(火) 23:55:37.82↑
お前がずれてますよ
605もアホだがエスパーすると…
…
…
…
警告なしに保存したいということだろ
だからDisplayAlerts=Falseが合っている
FileFormat指定が的外れ
警告はxlsxで保存するとマクロは保存されませんよ
ってことだからな
0619586
2012/03/14(水) 01:29:08.85作成しました。
http://www.vivi-loda.mydns.jp/index.php?m=dp&n=file1526
DLkey:asd
test1の方で実行しても、test2で実行しても、
こちらの環境(Win7 HomePreminum SP1(32ビット版)、Excel2003 SP3、メモリ3G)
だと、44シート追加したあたりで、当該エラーが出ます。
このファイルだと、マクロではエラーが出るものの、手作業でシート
追加はできますが、とりあえずこのエラーを回避したいです。(できるものなら)
ちなみにこのマクロを実行すると、一時的にPCが重くなったりするので、お気をつけください。
よろしくお願いいたします。
0620デフォルトの名無しさん
2012/03/14(水) 02:19:08.42自分の環境ではエラーにならない
Win7 Ultimate SP1 (64bit) メモリ8GB、Excel 2007 SP2
0621デフォルトの名無しさん
2012/03/14(水) 03:45:17.31Vista Ultimate SP2 32bit Excel2007 SP3もエラーなし
ちなみにシート500まで追加させても問題なし
2003の問題か、PCの問題だな
昔ディスプレイドライバー辺りのバグでExcelでメモリ不足出たことあったが
つかWin7でExcel2003とか動作保障あるのか
0622デフォルトの名無しさん
2012/03/14(水) 04:00:24.00流れ読んでないけど、ワークシートのコピーは複数回実行するとマクロでなぜかエラーになる現象がある。
標準のワークシートをコピーする関数を使うのはやめて、「ワークシートを追加→セル全体をコピー→ペースト」
という関数を作っておくと楽。
0623622
2012/03/14(水) 04:19:36.65・Win7 Ultimate XP SP3 / Excel 2003 SP3 / メモリ3G
・Win7 Ultimate SP1 x86 / Excel 2003 SP3 / メモリ3G
・Win7 Ultimate SP1 x64 / Excel 2003 SP3 / メモリ8G
でも「実行時エラー '1004':
Worksheet クラスの Copy メソッドが失敗しました。」は出ます。
(エラーが発生する回数はランダム)
念のため確認ですが、手作業で「シートの追加」はできても「シートのコピー」はできないですよね?
で、ファイルを開き直すといったん復活して、再度実行すると同じ感じでエラーになる(毎回エラーに
なる回数は違う)ってやつですよね?
というよりか、マクロを使わないでも手動で何十回もシートをコピーすると、シートがコピーできないが
シートの追加はできるという現象は発生します。標準のシートコピーは使わないのがよいと思われます。
でも、この現象ってExcel 2007だと発生しないのか。知らなかった。
0624622
2012/03/14(水) 04:22:25.46Win XP SP3の間違いです・・・。
0625デフォルトの名無しさん
2012/03/14(水) 06:50:26.270626デフォルトの名無しさん
2012/03/14(水) 06:59:09.15No1参照
0627デフォルトの名無しさん
2012/03/14(水) 12:09:50.350628デフォルトの名無しさん
2012/03/14(水) 12:30:24.18マクロを記録してみろ
0629デフォルトの名無しさん
2012/03/14(水) 17:08:15.940630デフォルトの名無しさん
2012/03/14(水) 17:24:44.23http://www.google.co.jp
0631デフォルトの名無しさん
2012/03/14(水) 17:32:20.94IsNumeric
0632デフォルトの名無しさん
2012/03/14(水) 17:42:11.290633デフォルトの名無しさん
2012/03/14(水) 17:43:03.450634デフォルトの名無しさん
2012/03/14(水) 17:49:15.82変数作って数えさせろよ
0635デフォルトの名無しさん
2012/03/14(水) 17:54:30.780636デフォルトの名無しさん
2012/03/14(水) 18:05:08.53Do While true
count++
Loop
0637デフォルトの名無しさん
2012/03/14(水) 18:07:40.23Dim count As Integer: count = 0
Do While True
count = count + 1
Loop
0638デフォルトの名無しさん
2012/03/14(水) 18:14:02.460640デフォルトの名無しさん
2012/03/14(水) 22:55:04.43Javaなどは募集をよく見ますが…
あとVBAとJavaは皆さんどのくらいでできるようになりましたか?
専門学校で学んだのですか?
0641デフォルトの名無しさん
2012/03/14(水) 22:59:58.12すれ違いなような
0642デフォルトの名無しさん
2012/03/14(水) 23:45:13.32VBAだけで就職は無理
Excelが使えるって条件の事務職員の募集なら見たことあるけど
0643デフォルトの名無しさん
2012/03/15(木) 00:14:07.98Excel2003、2010どちらでもいいので、できるならばやり方を教えてください。
よろしくお願いします。
0644デフォルトの名無しさん
2012/03/15(木) 00:48:20.37縦でも横でもやり方は同じ
軸を右クリックすれば設定画面が出る
0645デフォルトの名無しさん
2012/03/15(木) 00:51:34.04, ‐' ´ ``‐、 / ̄:三}
. /,. -─‐- 、. ヽ / ,.=j
_,.:_'______ヽ、 .! ./ _,ノ
`‐、{ へ '゙⌒ `!~ヽ. ! /{. /
`! し゚ ( ゚j `v‐冫 , '::::::::ヽ、/ そんなことよりネコ投げようぜ!
. {.l '⌒ ゙ 6',! / :::::::::::::::/ __
. 〈 < ´ ̄,フ .ノー'_ , ‐'´::::::::::::::;/ (_ノ)‐-、
. ヽ.、 ` ‐", ‐´‐:ラ ':::::::::::::::: ;∠. ヽ_} ゙ヽ
,.r` "´ /:::::::::::::::::::ィ´ `ゝ !、 /
/ / :::::::::::::::: ;な /´\ / r'\
. i ! ::::::::::::::/ る | .!::::::::/ヽ、.._!ヽ. ヽ、
{ {:::::::::::;:イ / し ‖i:::::::/:::::::::::::/ \
. ヽ ヽ,.ァ‐'´ /ヽ ま ,/`ヽ、::::::::: /
http://i.imgur.com/iMDi4.jpg
0646デフォルトの名無しさん
2012/03/15(木) 01:14:33.54こんな時間にレスありがとうございます。
今2010でやってるのですが、右クリックすると軸の書式設定というメニューが
出るのですが、縦軸と横軸では項目内容が違っています。
横軸では、最大、最小、値の間隔はないです。
見てるところが違うのでしょうか?
0647デフォルトの名無しさん
2012/03/15(木) 01:50:23.30グラフの種類によっては変更できない
たとえば散布図だとどっちの軸も同じように設定が変えられる
0648デフォルトの名無しさん
2012/03/15(木) 01:51:43.73そのExcelが使えるってどの程度のレベルの使えるなの?
男でもある?
0649デフォルトの名無しさん
2012/03/15(木) 02:01:33.59ありがとうございます。
散布図で何とかできました。
0650デフォルトの名無しさん
2012/03/15(木) 02:05:46.33バイト価格だね
0651デフォルトの名無しさん
2012/03/15(木) 02:17:39.55Oracle SQLが使えるというのも含む
0652デフォルトの名無しさん
2012/03/15(木) 05:00:10.04DelphiだろうがJavaScriptだろうがJavaだろうがCだろうが
そんなに難しくない筈
むしろVBAのほうが難しいくらいかも
ただSQLはちょっと毛色が違うからVBAが使えることとSQL
が使えるということは同じだとは思わないほうがいいかも
0653デフォルトの名無しさん
2012/03/15(木) 06:51:56.550654デフォルトの名無しさん
2012/03/15(木) 07:03:43.750655デフォルトの名無しさん
2012/03/15(木) 08:17:32.38波形を気合いで計算してWAVの頭の構造体を気合いでくっつけてdirectsound8
0656デフォルトの名無しさん
2012/03/15(木) 08:22:26.53一番相性がいいのはもちろんAccess
0657デフォルトの名無しさん
2012/03/15(木) 16:53:47.11コード書き終えたの
ですけど12時間以上処理してるの
でアドバイスくれし
0658デフォルトの名無しさん
2012/03/15(木) 18:07:40.250659デフォルトの名無しさん
2012/03/15(木) 18:30:36.11ScreenUpdatingとか、よくある高速化テクニックは使ってる?
0660デフォルトの名無しさん
2012/03/15(木) 18:33:58.45csvファイルを出力させたいのですが、見よう見まねで固定のファイル名が出せるところまでは辿り着きました。
次にファイル名をセル参照なり変数でつけたいのですが、どうしたらいいでしょうか?
Private Sub CommandButton1_Click()
Const cnsFILENAME = "\test.CSV"
Dim FSO As New FileSystemObject
Dim TS As TextStream
Dim GYO As Long
Dim GYOMAX As Long
GYOMAX = Range("C65536").End(xlUp).Row
Set TS = FSO.CreateTextFile( _
Filename:=ThisWorkbook.Path & cnsFILENAME, _
Overwrite:=False)
GYO = 3
Do Until GYO > GYOMAX
TS.WriteLine FP_EDIT_CSVREC(GYO, 2, 3)
GYO = GYO + 1
Loop
TS.Close
MsgBox "OK"
Set TS = Nothing
Set FSO = Nothing
End Sub
0661デフォルトの名無しさん
2012/03/15(木) 19:32:54.15Dim cnsFILENAME As String
cnsFILENAME = "\test.CSV"
とか
cnsFILENAME = Range("C5").Text
とか
0662デフォルトの名無しさん
2012/03/15(木) 20:05:05.30進行状況だけ表示しとけばよかったかなあ
0663デフォルトの名無しさん
2012/03/15(木) 20:13:18.21これはかなり効く(たくさん埋め込んでいたらの話だけど)
0664デフォルトの名無しさん
2012/03/15(木) 21:12:15.180665デフォルトの名無しさん
2012/03/15(木) 21:15:09.260666デフォルトの名無しさん
2012/03/15(木) 21:19:50.440667デフォルトの名無しさん
2012/03/15(木) 21:22:44.25マクロの記録やってみれ
Excel2010では↓のようになった
Application.Calculation = xlManual
↓もとに戻す
Application.Calculation = xlAutomatic
0668デフォルトの名無しさん
2012/03/15(木) 21:23:06.410669デフォルトの名無しさん
2012/03/15(木) 21:30:59.55VBA初心者レベル、Excelは基本操作もおぼつかない
当然ながらブラインドタイプとかはできないし、
ほかの言語などもまったく分からない。
というレベルで
週5日*1日8時間*時給1800円の仕事してます。
作業内容は一日分ずつのCSVファイルを一か月分にまとめたり
それをグラフにしたりするだけです。
チョー楽だけど退屈です。
0670デフォルトの名無しさん
2012/03/15(木) 21:42:43.010671デフォルトの名無しさん
2012/03/15(木) 21:44:29.820672デフォルトの名無しさん
2012/03/15(木) 21:45:11.500673デフォルトの名無しさん
2012/03/15(木) 21:48:16.200674デフォルトの名無しさん
2012/03/15(木) 21:48:39.69時間を売って金を得て
金を使って時間を買うということ?
0675デフォルトの名無しさん
2012/03/15(木) 21:50:45.280676669
2012/03/15(木) 21:56:00.37会ったこともない誰かが作ったマクロを使ってます。
ところどころパラメータ(セルの行とか列とかの指定)を書き換えて実行するだけです。
>>675
ノルマは特に無いです
というかむしろ早く終わりすぎたらマズイらしくて
一年かけてダラダラやってます。
0677デフォルトの名無しさん
2012/03/15(木) 21:59:39.96コンピュータで処理できるようにしたのに、
コンピュータが勝手に作ってる
とか、言われたときは...
0678デフォルトの名無しさん
2012/03/15(木) 21:59:45.52プログラミングの仕事ではないってこと?
0679デフォルトの名無しさん
2012/03/15(木) 22:01:22.71お役所?
0680デフォルトの名無しさん
2012/03/15(木) 22:04:50.80大阪市?
ここだけの話で
0681676
2012/03/15(木) 22:09:47.46一応、仕事の名目は
エクセルでのデータ整理です
>>679
公務員じゃないけど似たようなもんです。
業務の成果は求められてなくて、
ただ単に労働時間分の拘束をされてるだけって感じです。
>>680
ちゃいまっせ、ホンマにちゃいまっせw
0682デフォルトの名無しさん
2012/03/15(木) 23:12:01.770683デフォルトの名無しさん
2012/03/16(金) 00:43:25.24スピードも全く問題ないことがほとんど、使えなかった頃より実質こなせる業務がかなり増えた。
0684586
2012/03/16(金) 05:51:54.44>>620->>624
皆さん、ありがとうございます。
会社のPC(WinXP Pro SP3/Excel 2003 SP3/メモリ2G)
でもやはり44シート目で実行時エラーでした。
手持ちのもう一つのネットブック(Win7 32bit版/Excel2010/メモリ1G)
で試したら、エラーは出ず、なんと、500シートでも動きました。
2003のバグですかね。。
ありました・・・これですね。
http://support.microsoft.com/kb/210684/ja
-------
ブックに定義済みの名前を付けて保存したり、次のサンプル コードのように、ブックを閉じることがなく複数回ワークシートをコピーするとこの問題が発生することができます。
-------
発生することができます・・って・・・・
0685586
2012/03/16(金) 05:52:55.59ええと、マクロ実行して、1004が出たての未保存のブックは、シートの追加はできても、シートのコピーはできません。
(エラーも出ず、一瞬画面がブレたようになって無反応)
いったん、保存して開きなおしたファイルだと、シートのコピーはできますが、再び、マクロを実行すると、
実行時エラー'1004':
シートの名前をほかのシート、Visual Basic で参照されるオブジェクト ライブラリまたはワークシートと同じ名前に変更することはできません。
となって止まり、
ブックをみると、test1を押した場合は、「テンプレ(2)」を、test2を押した場合は、「テンプレ2 (2)」のシートを追加しようとしてるところで、また同じ名前で追加しようとして、止まってる感じ・・・
ActiveSheet.Name =
がうまくいってないような感じです。
しかもエラーの回数はなんか毎回、44です。。PCに他にどんな重い処理をさせていても44。。会社のPCもそうでした・・。
なんだコレ・・私のやり方が何かおかしいのか・・・
0686586
2012/03/16(金) 05:55:19.72http://www.microsofttranslator.com/BV.aspx?ref=CSSKB&lo=SS&from=en&to=ja&a=http://support.microsoft.com/kb/210684/en-us?fr=1
テンプレートで保存して呼び出して使えって・・・。Vlookupで引っ張ってて、複数のシートがあっても大丈夫なんかな・・・
それとも100シートごとに保存するか・・・
それともシート挿入→末尾に移動→値の貼り付け→書式の貼り付け→印刷設定の貼り付け
という関数を作っておくか・・・
印刷設定がちゃんとなってるシートの印刷を手前において、反映したいシートを複数選択し、
印刷設定を開いてそのままOKボタンを押すと、複数のファイルに印刷設定が反映されるって
書いてあって、実際その通りだったけど、ウィンドウ枠の固定と、印刷タイトルの設定が反映されてなかった・・・
これだけ一個一個やるように関数に組み込むしかないのか・・・
0687586
2012/03/16(金) 05:56:10.36しかもこの仕事を引き継ぐ人がマクロとか難しくて嫌だから、手作業でやりたいと言い出して、
このマクロは使われない可能性が高くなってきた・・・
中身なんて知らなくていいから、黙ってボタン押せっつーの!くそ・・・!
でも自己満で作るけどさ。
事務の世界っていつもこうなる・・・やっぱり私に事務は向かないのか・・かと言って、バケモンだらけのPGの世界ではこれ以上やってく自信がない・・・
>>677
あるあるあるあるあるある
=Exact() で簡単に同じかどうかのチェックなんて出来るのに、「目視確認でやった方が確実だから、目視でやって」、とか ┐(´д`)┌
チラ裏すみません。眠いです・・・
0688デフォルトの名無しさん
2012/03/16(金) 08:09:03.03サンクス
0689デフォルトの名無しさん
2012/03/16(金) 09:49:02.14Function sealtime(A As Range, B As Range)
'Application.Volatile '自作関数を自動再計算させます。
Dim time As Double
time = Application.WorksheetFunction.ATAN((B - A) / 1)
If time < 0.005 Then
sealtime = "OK"
Else
sealtime = ""
End If
End Function
0690デフォルトの名無しさん
2012/03/16(金) 09:55:24.55Application.WorksheetFunction.ATAN
より
Atn
のほうがいんじゃね
0691デフォルトの名無しさん
2012/03/16(金) 10:30:21.14ワークシート関数が全部VBAで使えるわけじゃない
0692デフォルトの名無しさん
2012/03/16(金) 11:13:02.48あと画像を開こうとしてキャンセルすると『1004 指定したファイルが見つかりませんでした』って出ます
どこを直せばいいでしょうか お願いします
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim myRange As Range
Set myRange = Range("C2:G10,C312:G21,C24:G32")
If Application.Intersect(Target, myRange) Is Nothing Then
Exit Sub
End If
Dim objFileName As String
Dim objShape As Shape
objFileName = Application.GetOpenFilename _
Set objShape = ActiveSheet.Shapes.AddPicture( _
Filename:=objFileName, _
LinkToFile:=False, _
SaveWithDocument:=True, _
Left:=Selection.Left, _
Top:=Selection.Top, _
Width:=242#, _
Height:=120#)
Cancel = True
End Sub
0693デフォルトの名無しさん
2012/03/16(金) 11:32:07.34sFile = Application.GetOpenFilename(FileFilter:="gif,.gif")
If sFile = "False" Then Exit Sub
0694デフォルトの名無しさん
2012/03/16(金) 12:12:14.79グラフ上のマーカーの上にマウスカーソルを乗せるとデータが表示できますが、
その表示されたデータを取得することはできないでしょうか?
もしくは、そのマーカーに対応するセルをアクティブにする方法でもいいです。
どなたか、よろしくお願いします。
0695デフォルトの名無しさん
2012/03/16(金) 12:32:19.74できません
0696デフォルトの名無しさん
2012/03/16(金) 12:50:50.80マーカーに透明なラベルを被せたら余裕で何でもできる
0697デフォルトの名無しさん
2012/03/16(金) 15:24:36.030698デフォルトの名無しさん
2012/03/16(金) 15:27:49.62例えば?
0699デフォルトの名無しさん
2012/03/16(金) 15:35:26.75for each a in range("a1:e5)
if("あほ"=a.value) then
count =count +1
end if
next a
で、
for b =1 to a
にしてるんだけど、bがバグる
0700デフォルトの名無しさん
2012/03/16(金) 15:35:57.240701デフォルトの名無しさん
2012/03/16(金) 15:41:28.29aって何?
0702デフォルトの名無しさん
2012/03/16(金) 15:41:47.29○ For b = 1 To count
× For b = 1 To a
0703デフォルトの名無しさん
2012/03/16(金) 15:45:00.170704デフォルトの名無しさん
2012/03/16(金) 15:45:45.84バグる?
0705デフォルトの名無しさん
2012/03/16(金) 15:52:53.95699がかなりあほってことでよろしいか?
0706デフォルトの名無しさん
2012/03/16(金) 15:54:53.700707デフォルトの名無しさん
2012/03/16(金) 15:57:41.20やはり自分で全部書くのが普通でしょうか。
0708デフォルトの名無しさん
2012/03/16(金) 16:22:56.46状況によるけど
そのままでは使い物にならないことが多い
ていうか、記録した方が早い部分と、自分で書いた方が早い部分とがあるので
うまく組み合わせた方が結果的に早くプログラムが完成する
0709デフォルトの名無しさん
2012/03/16(金) 23:26:58.50> >>694
> マーカーに透明なラベルを被せたら余裕で何でもできる
やり方教えてクレクレ
0710デフォルトの名無しさん
2012/03/16(金) 23:51:19.86Sub Workbook_Open
For I = 0 To ARGC -1
Debug.Print ARGV(I)
とか。
0711デフォルトの名無しさん
2012/03/17(土) 00:08:29.34そんな態度で教える馬鹿がいるか
0712デフォルトの名無しさん
2012/03/17(土) 00:09:20.050713デフォルトの名無しさん
2012/03/17(土) 00:11:35.150714デフォルトの名無しさん
2012/03/17(土) 00:14:16.480715デフォルトの名無しさん
2012/03/17(土) 00:34:43.42おしえれ
0716デフォルトの名無しさん
2012/03/17(土) 10:26:53.14> DOSのコマンドライン引数を取得できないの?
>
GetCommandLine関数
0717デフォルトの名無しさん
2012/03/17(土) 10:58:03.30おしえれ ksg
0718デフォルトの名無しさん
2012/03/17(土) 11:47:45.96ありがとうございます。
http://msdn.microsoft.com/ja-jp/library/cc429108.aspx
ってこれ外部ライブラリ・コールか何かせんとあかんのやね、きっと。
0719デフォルトの名無しさん
2012/03/17(土) 14:02:53.16Private Declare Function GetCommandLine Lib \\\"kernel32\\\" Alias \\\"GetCommandLineA\\\" () As Long
Private Declare Function lstrcpy Lib \\\"kernel32\\\" Alias \\\"lstrcpyA\\\" (ByVal lpString1 As String, ByVal lpString2 As Any) As Long
Sub Workbook_Open
Dim sBuf As String
strBuf = Space$(255)
Call lstrcpy(strBuf, GetCommandLine())
Debug.Print strBuf
end Sub
0720デフォルトの名無しさん
2012/03/17(土) 14:05:29.66Private Declare Function GetCommandLine Lib "kernel32 " Alias "GetCommandLineA" () As Long
Private Declare Function lstrcpy Lib "kernel32 " Alias "lstrcpyA " (ByVal lpString1 As String, ByVal lpString2 As Any) As Long
こうね
0721694
2012/03/17(土) 22:07:32.08クリックで値が取れた!
0722デフォルトの名無しさん
2012/03/18(日) 15:07:11.33派遣ですか?
正社員がいいのですが
0723デフォルトの名無しさん
2012/03/18(日) 15:17:58.270724デフォルトの名無しさん
2012/03/18(日) 16:42:41.53A1-E1に1,2,3,4,5値が振ってあって
A2-E2,A3-E3,....,A100-E100まで数値がランダムに入っています。
このとき各行を、それぞれ列の昇順で並べかえたい。つまりA2-E2,A3-E3,....,A100-E100とそれぞれ昇順に並べかえたいのですが、
そのとき1-5の値の対応を残したいのです。どうすればよいでしょうか!!
0725669
2012/03/18(日) 17:09:54.42私は正社員ですがパートさんも居ます。
ただ、求人かけてないので・・・
あと、あまり詳しく書くと特定されそうなので
もうこれ以上書かないことにします。
とりあえず大阪府も大阪市も一切関係ない民間企業です。
0726デフォルトの名無しさん
2012/03/18(日) 18:18:26.86説明が下手すぎて質問が意味不明
0727デフォルトの名無しさん
2012/03/18(日) 18:31:41.37子どもたちを守るためには必要だよな
0728デフォルトの名無しさん
2012/03/18(日) 19:12:42.15おりあえず、A2:E2 をソートしたいらしい。
0729デフォルトの名無しさん
2012/03/18(日) 19:38:33.54Sub Macro1()
' Version : Excel 2002 VB6.0
Range("A2:E2").Select
Selection.Sort Key1:=Range("A2"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlLeftToRight, SortMethod _
:=xlPinYin, DataOption1:=xlSortNormal
End Sub
0730デフォルトの名無しさん
2012/03/18(日) 20:05:11.79>そのとき1-5の値の対応を残したい
だと思うんだが
具体的に何をどうしたいのかがさっぱり解らんな
0731デフォルトの名無しさん
2012/03/18(日) 20:42:22.240732デフォルトの名無しさん
2012/03/18(日) 21:06:10.55数値が入ってるセルを行毎に昇順で並び変えたときの、順番を取得しまして、
次にその順番を基準に、最初にセルがあった列番号を並べ変えてですね、
さらにそれにセルに入ってた数値を対応させたいのですけど、具体的にすればいいのかはわからなくて行を2行にするくらいしか思いつかないのですのでなにかよい方方法を教えてみて下さいマシマロ
0733デフォルトの名無しさん
2012/03/18(日) 21:21:45.790734デフォルトの名無しさん
2012/03/18(日) 21:28:55.250735デフォルトの名無しさん
2012/03/18(日) 21:40:34.77て、そこに文字列や書式設定をやりたい。
Sub mkTextBTest02()
Dim shSel As Shape
Set shSel = ActiveSheet.Shapes.AddTextbox(msoTextOrientationHorizontal, _
48#, 20 + 16 * lC, 10#, 16#)
shSel.Characters.Text = lC '←$文字列を書く
With shSel.Font '←$フォントの設定
.Name = "MS ゴシック"
.Size = 9
End With
shSel.ShapeRange.Line.ForeColor.SchemeColor = 1 '←$フォントの設定
End Sub
←$印の所でエラーが起きる。
.Characters .Font .ShapeRange は、class Shapeのpropertyでないから。
"ActiveSheet.Shapes.AddTextbox(〜).Select"として変数shSelの代わりに、
Selectionと書くとエラーが起きない。
class Shapeのproperty Characters,Font,ShapeRangeを指定するにはどうす
ればいいでしょうか。
0736729
2012/03/18(日) 21:59:27.07BEFORE:
A1 B1 C1 D1 E1
+-------+-------+-------+-------+-------
1 2 3 4 5
21 20 19 18 17
31 32 33 34 35
45 44 43 42 41
56 52 53 54 55
61 65 63 62 60
+-------+-------+-------+-------+-------
AFTER:
A1 B1 C1 D1 E1 F1 G1 H1 I1 J1
+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------
1 2 3 4 5 1 2 3 4 5
17 18 19 20 21 5 4 3 2 1
31 32 33 34 35 1 2 3 4 5
41 42 43 44 45 5 4 3 2 1
52 53 54 55 56 5 1 2 3 4
60 61 62 63 65 2 5 4 3 1
+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------
0737デフォルトの名無しさん
2012/03/18(日) 22:05:40.660738デフォルトの名無しさん
2012/03/18(日) 22:07:03.600739デフォルトの名無しさん
2012/03/18(日) 22:14:21.32元のデータ
12 54 . 8 23 36
これを
121.542 83 234 365
にしてから並べ替えれば、下1桁をチェックすれば元の位置がわかる
0740デフォルトの名無しさん
2012/03/18(日) 22:20:57.88ちゃんと例を上げて処理をひとつずつ説明しろ
変な言葉遣い止めろ
0741デフォルトの名無しさん
2012/03/18(日) 22:36:53.870742デフォルトの名無しさん
2012/03/18(日) 23:30:16.99どんだけ低脳なんだよ
いいわけないだろ
ただ複数の値を保持したいだけなんじゃないのかよ
データ用と表示用で表を分けるとか
Idプロパティ使うとかすればいいだろ
Idなら、
A.Idを降るプロシージャ(1〜5)
B.それぞれの行を並べ替えるプロシージャ
C.IdとValueを入れ替えるプロシージャ
を作って、ABで並べ替えた後、
CBCで元の並びに戻る
0743デフォルトの名無しさん
2012/03/18(日) 23:36:09.020744デフォルトの名無しさん
2012/03/18(日) 23:40:58.340745デフォルトの名無しさん
2012/03/19(月) 04:38:22.65↑これを
エクセルのシート上で
="'"&A1
と書くとセルA1の文字列の前に ' が
連結されるのですが
VBAで
dot = "'"
Cells(A, 5) = dot & Cells(A, 1)
と書いてもA5セルの文字列(A1の中身)の前に ' が
表示されずA5セルをクリックすると
上部のセルの中身が見れるバーには ' が文字列の前に
表示されています。
A5セルを他のセルにコピーしても
文字列だけコピーされて ' はコピーされません。
VBAを使って、文字列の前に ' を連結させたいのですが
良い方法ありませんか?
0746デフォルトの名無しさん
2012/03/19(月) 05:08:10.31まず自分で調べろ
俺も知らなかったけど
ググったら載ってたぞ
いい加減にしろ!!
0747デフォルトの名無しさん
2012/03/19(月) 08:02:09.18VBAのプログラムがおかしいかと
何時間も考えたけど
ぐぐったら1分で解決しました
ありがとう
0748デフォルトの名無しさん
2012/03/19(月) 22:01:31.40以下の様に、変更するとテキストボックスをかけるようになった。
Sub mkTextBTest02()
Dim shSel As Shape
Set shSel = ActiveSheet.Shapes.AddTextbox(msoTextOrientationHorizontal, _
48#, 20 + 16 * lC, 10#, 16#)
shSel.TextFrame.Characters.Text = lC '←$文字列を書く
With shSel.TextFrame.Characters.Font '←$フォントの設定
.Name = "MS ゴシック"
.Size = 9
End With
shSel.Line.ForeColor.SchemeColor = 8 '←$フォントの設定
End Sub
VB Editorのヘルプを調べてわかった。
各くオブジェクトのpropertyと、propertyのobjectを定義するclassの区別
がついていなかった。
0749デフォルトの名無しさん
2012/03/19(月) 22:12:28.38ワークシートで= =C4-C3とすれば、140.55という数字が入ります
んで、VBAで同じように引き算で
Cells(4, 5) = Cells(4, 3) - Cells(3, 3)
とすると見かけ上は同じく140.55という数字が入っていますが、
上の関数入力するとこを見ると140.54999999
という数字になっています
なぜ?
この場合小数点以下三桁のとこで四捨五入しないとだめ?
0750デフォルトの名無しさん
2012/03/19(月) 22:56:52.80"'"は、セルが文字列型であることを示す接頭辞だから消えてしまう。
Cells(5, 1) = "''" & Cells(1, 1)
と書くか。
しかし、Cells(6, 1) = Cells(5, 1) 頭に"'"あるCells(5, 1)をCells(6, 1)
にコピーすると、Cells(6,1)では頭の"'"は消えてしまう。
しかし、Cells(A,5)と言う書き方、間違っているのでは。
0751デフォルトの名無しさん
2012/03/20(火) 01:00:47.78コンピュータで小数点以下を扱う場合は誤差がでることを考慮に入れる必要があるんだよ
ちなみにその計算式のセルを小数点以下20桁とかの表示にしてみ
>>750
>しかし、Cells(A,5)と言う書き方、間違っているのでは。
文法的にはAという変数でRowIndexを指定してる。間違ってはいない
まあ、意図したものと違うだろうって意味では間違ってるがw
0752デフォルトの名無しさん
2012/03/20(火) 05:22:57.78とりあえず、数字を100倍して引き算をし、その後また100で割るようにしておきました。
0753デフォルトの名無しさん
2012/03/20(火) 10:39:54.040754デフォルトの名無しさん
2012/03/20(火) 16:43:04.59しーとの
けつごう
0755デフォルトの名無しさん
2012/03/20(火) 16:52:15.110756デフォルトの名無しさん
2012/03/20(火) 17:38:02.760757デフォルトの名無しさん
2012/03/20(火) 18:03:41.58On Error Resume Next
0758デフォルトの名無しさん
2012/03/20(火) 19:43:41.75他に使わないで、ただ閉じたいんですが、どう書けばいいでしょうか?
マクロの記録だと、ブックを閉じてしまうため、記録が残りません。
0759デフォルトの名無しさん
2012/03/20(火) 19:53:02.06ぶっちゃけファイルコピーで済むようにも見える。
0760デフォルトの名無しさん
2012/03/20(火) 20:35:55.010761デフォルトの名無しさん
2012/03/20(火) 21:34:10.110762デフォルトの名無しさん
2012/03/20(火) 21:50:35.250763デフォルトの名無しさん
2012/03/21(水) 00:03:45.84どう書けばよいですか
0764デフォルトの名無しさん
2012/03/21(水) 00:06:51.110765デフォルトの名無しさん
2012/03/21(水) 00:40:15.330766デフォルトの名無しさん
2012/03/21(水) 00:41:18.41かぞえなくても Cells(5, "BB") みたいに書けるからあんまり困らない
0767デフォルトの名無しさん
2012/03/21(水) 00:42:22.850768デフォルトの名無しさん
2012/03/21(水) 00:44:11.280769デフォルトの名無しさん
2012/03/21(水) 00:47:07.630770デフォルトの名無しさん
2012/03/21(水) 00:49:05.83これで動いたぞ
Dim 範囲 As Range
Set 範囲 = Range("A1")
Debug.Print Application.Small(範囲, 1)
0771デフォルトの名無しさん
2012/03/21(水) 00:57:41.83これどこちがう
0772デフォルトの名無しさん
2012/03/21(水) 01:01:05.19エスパー能力を最大限に発揮すると思いつくのはこんなとこ
・シート名が"a"ではない
・セルの範囲が実は間違っている
・変数名がcではない
0773デフォルトの名無しさん
2012/03/21(水) 01:07:26.090774デフォルトの名無しさん
2012/03/21(水) 01:07:38.930775デフォルトの名無しさん
2012/03/21(水) 01:09:11.73Set c = Worksheets("a").Range(Worksheets("a").Cells(1, 1), Worksheets("a").Cells(1, 2))
又は
Set ws = Worksheets("a")
Set c = ws.Range(ws.Cells(1, 1), ws.Cells(1, 2))
0776デフォルトの名無しさん
2012/03/21(水) 01:12:44.970777デフォルトの名無しさん
2012/03/21(水) 01:52:04.45例えば最初は通常の動作(ショートカットメニューを表示)、あるコマンドボタンを押してから右クリックすると条件付き書式設定のダイアログボックスを表示、また別のコマンドボタンを押すと通常のショートカットメニューに戻す
0778デフォルトの名無しさん
2012/03/21(水) 05:31:19.870779デフォルトの名無しさん
2012/03/21(水) 11:58:38.03$なしの番地はどうすれば取得できるのですか?
そもそもなぜ$サインがつくのでしょうか?
0780デフォルトの名無しさん
2012/03/21(水) 12:03:18.85replace関数で"$"を""に置き換えるといいです
0781デフォルトの名無しさん
2012/03/21(水) 12:58:56.00ActiveCell.Address(False, False)
ヘルプを読めよ
式.Address(RowAbsolute, ColumnAbsolute, ReferenceStyle, External, RelativeTo)
0782デフォルトの名無しさん
2012/03/21(水) 14:58:10.99Thnx
0783デフォルトの名無しさん
2012/03/22(木) 18:54:20.16引数明示して書くとき、例えば下のケースだが
Range(Cells(1, 1), Cells(1, 2)).Replace what:="111", replacement:="", MatchCase:=False
これはすべて小文字で入力したんだがmatchcaseだけ修正されるのはなぜなんだ?
0784デフォルトの名無しさん
2012/03/22(木) 19:23:14.78仕様だから、としか答えようがない
0785デフォルトの名無しさん
2012/03/22(木) 19:53:58.40ありがとう
謎仕様なんだな
0786デフォルトの名無しさん
2012/03/22(木) 22:16:41.560787デフォルトの名無しさん
2012/03/22(木) 22:20:20.58ホントだ、気持ちわりーな
0788デフォルトの名無しさん
2012/03/22(木) 23:26:12.89whatやreplacementだとキーワードが見つかりません。になる
MatchCaseってプロパティと勘違いして補正されてると思われ
0789デフォルトの名無しさん
2012/03/22(木) 23:38:35.97あーなるほど
理解した、ありがとう
しかしこれ気になるよな
ただ、直すのも面倒なんだよな
0790デフォルトの名無しさん
2012/03/23(金) 08:04:17.83音量を変えるにはどうしたらいいでしょうか
http://up1m.ko.gs/src/koups1393.zip
0791デフォルトの名無しさん
2012/03/23(金) 14:09:48.74>>2
0792デフォルトの名無しさん
2012/03/23(金) 15:08:59.92遅くなりましたが出来ました。
もう一つ質問なのですがCtrlキーを押しながら任意のセルを選択した時、そのアドレスを全て取得するにはどうすればよいのでしょうか
例えば、A1、A3、A7、B1、B2、B4、C3、C4、C5を選択した時にこの9個のアドレスを取得したいのです
0793デフォルトの名無しさん
2012/03/23(金) 15:16:28.75Application.Selection
0795デフォルトの名無しさん
2012/03/23(金) 17:27:44.810796デフォルトの名無しさん
2012/03/23(金) 18:07:16.00これ以外のシートの内容を下のマクロで消すと表示がおかしくなるんだけど
なぜなんだ??
sub test
worksheets(2).cells.delete
end sub
条件書式以外にもindirectを使ったセルでもおかしくなる
0797デフォルトの名無しさん
2012/03/23(金) 18:11:20.360798792
2012/03/23(金) 18:16:57.46Sel_Addr = Application.Selection.Address
としたら取得できました。
0799デフォルトの名無しさん
2012/03/23(金) 18:35:18.850800デフォルトの名無しさん
2012/03/23(金) 18:54:15.56参照って
=Sheet2!A1みたいに使ってるかってことか?
なら使ってない
表示がおかしいって書いたが、アクティブセルの囲い線が残るような感じ
0801デフォルトの名無しさん
2012/03/24(土) 07:44:03.99単なるバグじゃないの?
ScreenUpdatingをFalseにしてからworksheets(2).cells.deleteしたらいい
0802デフォルトの名無しさん
2012/03/24(土) 15:01:00.18やっぱりバグなのかー
ありがとう
0803デフォルトの名無しさん
2012/03/24(土) 16:18:46.43したいのですが・・・
0804デフォルトの名無しさん
2012/03/24(土) 16:21:04.88モードレスで開けばいい
0805デフォルトの名無しさん
2012/03/24(土) 16:21:48.600806デフォルトの名無しさん
2012/03/24(土) 16:26:46.00Thnx
モードレスで、表示すればよいのでは?
UserForm1.Show vbModeless
とか
UserForm1.Show 0
0807デフォルトの名無しさん
2012/03/24(土) 16:38:43.39セルに名前を付けて名前経由で座標を指定しろよ
ソース解析&改造しててやりにくくてしかたない
0808デフォルトの名無しさん
2012/03/24(土) 16:49:06.55調べたら
以下のサイトが参考になったので
ttp://ziddy.japan.zdnet.com/qa3168255.html?order=DESC&by=datetime
Sub CSV結合()
Const CRFILE As String = "C:\My Documents\test2"
Dim obj As Object
Dim arg As String
Set obj = CreateObject("Shell.Application") _
.BrowseForFolder(0, "SelectFolder", 0)
If obj Is Nothing Then Exit Sub
arg = obj.self.Path & "\*.csv "
Set obj = Nothing
Call Shell(Environ("ComSpec") & " /c copy /b " & arg & CRFILE)
End Sub
とやっているのですがうまくいきません。
フォルダ選択の画面はでてくるのですが
C:\My Documents\test2
に結合されたCSVファイルができるはずですが、できなくて。
ソース間違ってますか?
エクセル2007です。
0809デフォルトの名無しさん
2012/03/24(土) 17:01:15.46Const CRFILE As String = "C:\test2"
Cドライブ直下にtest2フォルダ作ってみてもだめでした
0810デフォルトの名無しさん
2012/03/24(土) 17:07:43.90とりあえず、空白を含むパスはダブルクォートで囲まないと駄目だ。
0811デフォルトの名無しさん
2012/03/24(土) 17:15:53.57Const CRFILE As String = "C:\My Documents\test2.csv"
で出来たけど?
0812デフォルトの名無しさん
2012/03/24(土) 17:20:05.20>>2
0813デフォルトの名無しさん
2012/03/24(土) 17:37:21.02こめんなさい。心当たりが沢山ありすぎてもう…
0814デフォルトの名無しさん
2012/03/24(土) 17:41:43.68コマンドライン文字列とはなんですか?
他にCSVファイルを2個作ってみたけどだめでした。
>>811
拡張子つけたけどだめでした。
>>812
XPでエクセル2007です
ソースをステップ実行させても
全部の行を実行してるのに
なんだろうこれは・・・
0815デフォルトの名無しさん
2012/03/24(土) 17:50:40.990816デフォルトの名無しさん
2012/03/24(土) 17:54:23.10そう来るかw
0817デフォルトの名無しさん
2012/03/24(土) 18:38:25.29>>2
0818デフォルトの名無しさん
2012/03/24(土) 19:20:45.41これで指定したレンジ範囲の数値を、小さい順に並べた場合の各々の差が、x以上であるとかx以下であるといった判定をするにはどう書けばよいですか!
0819デフォルトの名無しさん
2012/03/24(土) 20:30:24.96IsNumeric関数とIfステートメントを使う
詳細はヘルプを読めばわかる
0820デフォルトの名無しさん
2012/03/24(土) 22:05:47.670821デフォルトの名無しさん
2012/03/24(土) 22:08:14.94強制力なんかないからね
0822デフォルトの名無しさん
2012/03/24(土) 22:55:40.150823デフォルトの名無しさん
2012/03/24(土) 22:59:30.43if a1>a2+x and a2+x>a3+x then
0824デフォルトの名無しさん
2012/03/24(土) 23:02:42.680825デフォルトの名無しさん
2012/03/24(土) 23:04:33.81訂正 if a1>a2+x>a3+2x then
0826デフォルトの名無しさん
2012/03/24(土) 23:07:17.88しかしx以下の場合を求めたいときはどうすればいい?
0827デフォルトの名無しさん
2012/03/24(土) 23:08:16.930828デフォルトの名無しさん
2012/03/24(土) 23:13:47.11VBAを使うしかないだろうな
0829デフォルトの名無しさん
2012/03/24(土) 23:23:17.89アンダースコアを使えばステートメントを複数行に分けて記述することができる
例えばこんな感じ
If 条件式1 And _
条件式2 And _
条件式3 And _
条件式4 And _
既にスレチなので>>2をよく読んでくれ
0830デフォルトの名無しさん
2012/03/25(日) 02:53:38.96call 実行1
で普通に処理されるのですが。
Dim moji As string
moji = "実行1"
call moji
は当然ですが実行されません。ですが、何かプロシージャそのものを変数化させて
状況に応じて呼び出せるようにする方法があるでしょうか?
ユーザーフォームのリストボックスに何十種類ものプロシージャがあるのですが、それらを
効率的に場合わけして処理するのに、それが出来ると便利なのですが。
方法はないのでしょうか?
0831デフォルトの名無しさん
2012/03/25(日) 03:35:34.73Application.Run ThisWorkbook.Name & "!" & moji
普通は Call ほにゃらら(moji) ってやって、ほにゃららの中でmojiによって分岐するようなプログラムを書くもんだけど
0832デフォルトの名無しさん
2012/03/25(日) 03:37:32.62つか普通そうする
プログラミングの手法とかそういう話だから後はそういうスレで聞いてくれ
0833デフォルトの名無しさん
2012/03/25(日) 03:38:56.850834デフォルトの名無しさん
2012/03/25(日) 06:28:18.30ありがとうございます。
>>832
実はそのように、select で、分岐していたんですが、数が多くなりすぎて。
ただ、selectの分岐がいくら多くなっても、速度とかに影響するという
わけでもないので、良いといえば、良いのですが、スマートにできないかと
気になってしまいまして。
0835デフォルトの名無しさん
2012/03/25(日) 12:59:29.22if a(i-1) - a(i) <= x then y= false
next I
0836デフォルトの名無しさん
2012/03/25(日) 15:22:52.170837デフォルトの名無しさん
2012/03/25(日) 15:31:17.780838デフォルトの名無しさん
2012/03/25(日) 17:04:00.7320120201.csv
20120202.csv
・・・
20120228.csv
というファイルを201202.xlsファイルにまとめたいと考えています。
(シート名を01,02,・・・,28にして、1bookに28シートが出来上がるイメージ)
0839デフォルトの名無しさん
2012/03/25(日) 18:13:25.03ご自身のコーディング速度と手作業での速度を比較してみればどちらが効率がよいか一目瞭然です
1回限りの作業であれば手作業でやるのが一番効率がよいでしょう
ExcelVBAに関係がない話題なのでこのへんで終了
0840デフォルトの名無しさん
2012/03/25(日) 19:06:52.20配布物の中の別のファイルの情報を取得する場合
ttp://www.asahi-net.or.jp/~ef2o-inue/vba_o/sub05_110_140.html
で相対パスだと危険があるとあったのですが
ThisWorkbook.Path & "\..\date\ファイル名"
のようなやり方だと階層をまたいでも中をいじられない限り
どんな環境の人が使っても問題ないと思っていいのでしょうか
それと、相対パスで一つ上の階層に行くやり方で
Dim mPath As String
mPath = ThisWorkbook.Path
i = Len(mPath) - Len(Replace(mPath, "\", ""))
If i > 1 Then
mPath = Mid(mPath, 1, InStrRev(mPath, "\") - 1)
End If
というやり方が紹介されていたのですが
これは..に対して上に階層があるのか調べる機能が付いただけ
という認識でいいのでしょうか
0841デフォルトの名無しさん
2012/03/25(日) 19:18:37.85お前の認識間違えてるぞ
アホ
ちゃんと読め
0842デフォルトの名無しさん
2012/03/25(日) 19:18:46.91すべてにおいて見当違い
手始めに「相対パス」がなんなのか理解してきた方がいい
0843デフォルトの名無しさん
2012/03/25(日) 20:40:54.08一回限りの作業ではなく、毎月発生する作業です。
現在は
新しいブックに開く→シートの移動
を繰り返すコードにしてるのですが、
見るからに効率が悪くなっています。
0844デフォルトの名無しさん
2012/03/25(日) 20:51:07.07相対パスって基準から見た位置ですよね
URLのは基準を指定しないとカレントフォルダからになるから危なくて
ThisWorkbook.Pathで基準をブックのある位置を指定すれば問題ないのかなと思ったんですが
0845デフォルトの名無しさん
2012/03/25(日) 20:57:55.20検索すれば、参考になるコードいくらでも出てくるだろ。
Dir 関数使えばいいんじゃない。
0846デフォルトの名無しさん
2012/03/25(日) 21:37:10.43見るからに効率が悪いことに気づいてるんだったら改善すればいい
0847デフォルトの名無しさん
2012/03/25(日) 21:37:33.36「危ない」とか「問題」ってのは具体的にどういうことなの?
具体的に説明してくれないと誰もわからないよ
0848デフォルトの名無しさん
2012/03/25(日) 21:55:49.31QueryTables.Add使え
0849デフォルトの名無しさん
2012/03/25(日) 22:44:15.07「絶対的基準に基づいてないから危ない」とか言い出すぞw
0850デフォルトの名無しさん
2012/03/25(日) 22:54:44.01もう一回お前のリンク先読み直してから来いよ
音読な
0851デフォルトの名無しさん
2012/03/26(月) 01:01:30.47Excelどうこうよりも、まず日本語の読み書きを勉強した方がいいと思う
社会人になってから苦労するよ?
0852デフォルトの名無しさん
2012/03/27(火) 16:27:18.20だからJAVA, C++と同様にクラス間の継承もあるが、EXCELで予め定義された
既存のクラスのみでその関係があり、↓ここを見るとプログラマが定義する
マクロのクラスで、継承関係にあるものを作ることはできないみたい。
http://members3.jcom.home.ne.jp/daruma_kyo/aboutooa/vba_limit.html
既存のクラスの継承関係。例えば、collection WorkSheets,Chartsは、
collection Sheetsを継承している。
ActiveWorksheetでその時にカーソル(focus)を当てているものを示す、
property Selection。
その時にカーソルを何に当てているかによって、Selectionのクラスが、
Range, Shape, ChartAreaなどに変化しているみたい。
このproperty Selectionを定義しているクラスは、多分、あらゆるクラス
の継承元になっているclass "Object"でないかと思っていますが、
どうなんでしょうか。
0853デフォルトの名無しさん
2012/03/27(火) 16:48:39.95オブジェクトブラウザというものがある
0854デフォルトの名無しさん
2012/03/27(火) 17:19:20.10Sub 行の挿入()
Dim i As Integer
i = 1
Rows("i:2").Insert Shift:=xlDown
End Sub
型が違うと出てきます
iの定義が間違ってるのかと思うのですが
LongやVariantなども試したもののだめで、整数値で型が違うといわれるのもなぜかわかりません
初歩的で申し訳ないですが教えてください
0855デフォルトの名無しさん
2012/03/27(火) 17:40:07.26“Rows”の上にカーソルを置いて[F1]キーでヘルプを開いて読め
0856デフォルトの名無しさん
2012/03/27(火) 17:58:53.56できました
ありがとうございます
0857デフォルトの名無しさん
2012/03/27(火) 21:51:31.61>EXCEL VBAは基本的にはオブジェクト指向言語。
VBAはもともとオブジェクト指向ではない言語をオブジェクト指向に拡張した言語(の派生)
オブジェクト指向言語だと言いきるには不備が多い
>既存のクラスの継承関係
基本的に継承関係は保障されているわけではない(と思う。保障されてるならソース教えてくれ)
つまり(Setによる代入で)キャスト出来るかどうかは実行してみないと解らない
>ActiveWorksheetでその時にカーソル(focus)を当てているものを示す、property Selection。
ActiveWorksheetなんてクラス(型)はない。WorksheetにはSelectionなんてプロパティはない
>Selectionのクラスが、(略)変化しているみたい。
Selectionなんていうクラスも無いのは理解できてるのか?
(Windowクラスの)Selectionの戻り値の型について、Object型で実際はいろんな型が戻されるんだぞ
>このproperty Selectionを定義しているクラスは、
Selectionなんてクラスはないし、Selectionプロパティを実装(定義)してるクラスはどんな型だろうと関係ない
問題はSelectionプロパティ(の戻り値)の型
>あらゆるクラスの継承元になっているclass "Object"でないかと思っています
VBAにはObjectという型はあるが、Objectクラスというクラスはない(はず)
Object型にはあらゆるクラスが格納できるが、それは全てのクラスがObjectから派生してることを意味しない
なぜならVBAは純粋なオブジェクト指向言語ではないから
0858デフォルトの名無しさん
2012/03/28(水) 11:52:43.27> 基本的に継承関係は保障されているわけではない(と思う。保障されてるならソース教えてくれ)
> つまり(Setによる代入で)キャスト出来るかどうかは実行してみないと解らない
できない例は?
0859デフォルトの名無しさん
2012/03/28(水) 14:59:45.96class, object, collection, propertyの概念の区別がきっちりできていな
いです。
>>Selectionなんてクラスはないし、Selectionプロパティを実装(定義)してるクラスはどんな型だろうと関係ない
object browserで見ると、Selectionはobject Applicationとobject Windows
のmember(property)になっているみたいです。
これのヘルプを見る。
>>Property Selection As Object 読み取り専用
>>Selection プロパティ
>>Application オブジェクトでは、アクティブウィンドウで現在選択されて
>>いるオブジェクトを返します。
>>Windows オブジェクトでは、指定されたウィンドウで現在選択されている
>>オブジェクトを返します。
>>オブジェクト指向言語だと言いきるには不備が多い
↓参考
http://sites.google.com/site/compositiosystemae/home/vbaworld/upper/exp3/polymorphi
VBAのclass moduleでクラスを定義するとき
クラスの構築子(constructor)に当たるもの Class_Initialize()
クラスの消滅子(destructor)に当たるもの Class_Terminate()
構築子の引数はサポートされていない。
0860デフォルトの名無しさん
2012/03/28(水) 16:13:38.21> class, object, collection, propertyの概念の区別がきっちりできていな
> いです。
できてないのはお前だけじゃないの?
0861デフォルトの名無しさん
2012/03/28(水) 16:32:30.71適切なところでclassモジュールを使って、VBAで使える範囲の機能を
使えばいいのにっていつも思う。
とか言うと、VBAじゃ適切なところなんてない的な話になりがちな気がするが。
0862デフォルトの名無しさん
2012/03/28(水) 16:36:41.16自分の中で答え持っててそれを主張するだけなんだから
0863デフォルトの名無しさん
2012/03/28(水) 16:57:49.740864862
2012/03/28(水) 17:07:48.32ごめんよく読んでなかったは
0865デフォルトの名無しさん
2012/03/28(水) 17:23:26.770866デフォルトの名無しさん
2012/03/28(水) 23:12:36.94はげどう。
継承だって工夫すればできるし、
コンストラクタの引数がないのも特別不便ではない。
0867デフォルトの名無しさん
2012/03/28(水) 23:31:02.19VBAごときの小規模アプリに
オブジェクト指向など無用だ。
0868デフォルトの名無しさん
2012/03/28(水) 23:33:47.05って事があったなーと、ふと思い出したっす。
0869デフォルトの名無しさん
2012/03/28(水) 23:45:10.16ツールバーを削除しようとするとエラーが出ます。
原因をご教示下さい。
コードは長くなるので分けて書き込みます。
0870デフォルトの名無しさん
2012/03/28(水) 23:48:22.21Dim xlAPP As Application
Dim objBar As CommandBar
Dim objCont As CommandBarControl
Dim objBtn As CommandBarButton
Dim vntCaption As Variant , vntTipText As Variant , vntOnAction As Variant
Dim IX As Integer
Dim blnTRUE As Boolean
Set xlAPP = Application
vntCaption = Array("登録(&A)", "更新(&U)", "削除(&X)")
vntTipText = Array("登録を行ないます", "更新を行ないます", "削除を行ないます")
vntOnAction = Array("BTN_TOUROKU", "BTN_KOUSHIN", "BTN_SAKUJO")
Set objBar = xlAPP.CommandBars.Add(Name:=g_cnsTITLE, Position:=msoBarTop)
blnTRUE = False
For IX = 0 To 2
Set objCont = objBar.Controls.Add(Type:=msoControlButton)
objCont.BeginGroup = blnTRUE
' CommandBarButtonオブジェクトの参照を取得
Set objBtn = objCont
objBtn.Style = msoButtonCaption
objBtn.Caption = vntCaption(IX)
objBtn.TooltipText = vntTipText(IX)
objBtn.OnAction = vntOnAction(IX)
blnTRUE = True
Next IX
objBar.Visible = True
objBar.Protection = msoBarNoChangeVisible
ActiveWindow.ScrollRow = 1
Set objBtn = Nothing
Set objCont = Nothing
Set objBar = Nothing
End Sub
0871デフォルトの名無しさん
2012/03/28(水) 23:50:44.42' 閉じる時の自動実行処理
Private Sub Auto_Close()
Dim xlAPP As Application
Dim objBar As CommandBar
Set xlAPP = Application
★Set objBar = xlAPP.CommandBars(g_cnsTITLE)
objBar.Delete
Set objBar = Nothing
End Sub
★の部分で
実行時エラー'5':
プロシージャの呼び出し、または引数が不正です。
となります。原因と対策をご教示下さい。
0872デフォルトの名無しさん
2012/03/29(木) 00:07:11.46g_cnsTITLEに該当するツールバーがないんじゃない?
0873営利利用に関するLR審議中@詳細は自治スレへ
2012/03/29(木) 00:17:48.05直接ツールバー名を指定したら無事動きました。
ありがとうございました。
0874営利利用に関するLR審議中@詳細は自治スレへ
2012/03/29(木) 10:35:16.91Strategy Patternとか超便利なんですけど。
0875営利利用に関するLR審議中@詳細は自治スレへ
2012/04/02(月) 20:03:26.77登録するにはどうすればいいの?
0876営利利用に関するLR審議中@詳細は自治スレへ
2012/04/02(月) 20:29:50.48本文で日付以外は全部一緒。
Templateで、日付もその日のが自動入力、って設定する方法はどうやりますか?
マクロでもokです。
0877営利利用に関するLR審議中@詳細は自治スレへ
2012/04/02(月) 20:45:11.26Unix使えよオマエら
0878営利利用に関するLR審議中@詳細は自治スレへ
2012/04/02(月) 20:51:58.76OutlookのバージョンとExeclのバージョンを教えて
0879営利利用に関するLR審議中@詳細は自治スレへ
2012/04/02(月) 21:14:12.720880営利利用に関するLR審議中@詳細は自治スレへ
2012/04/03(火) 01:39:29.67EXCELまったく関係ないのはスレ違いなんだが
outlook テンプレート 日付 でググって最初のページでも見てろ
0881営利利用に関するLR審議中@詳細は自治スレへ
2012/04/03(火) 11:47:57.65検索サイトを一体どんな風に利用しているんだろう?
0882営利利用に関するLR審議中@詳細は自治スレへ
2012/04/03(火) 19:39:23.25WithEventsで宣言した変数に参照代入する
0883営利利用に関するLR審議中@詳細は自治スレへ
2012/04/04(水) 17:49:54.34列幅を大きくするとOKで
列幅を小さくして数字が##のようにすると
Set C がNothing になってしまう、いい方法ありますか
A2 = "gg50": A3 = "gg11:gg45"
n = sh4.Range(A2)
Set C = sh4.Range(A3).Find(Val(n), LookIn:=xlValues)
0884営利利用に関するLR審議中@詳細は自治スレへ
2012/04/04(水) 18:07:52.43検索するときに列幅を広げて
検索が終わったら列幅を元に戻す
0885営利利用に関するLR審議中@詳細は自治スレへ
2012/04/04(水) 18:14:12.91ありがとう
0886営利利用に関するLR審議中@詳細は自治スレへ
2012/04/05(木) 08:36:11.39調べてもreplaceしか出てこないんだ
内部処理で文字列を違う文字列として扱ったりしたいんだ
0887営利利用に関するLR審議中@詳細は自治スレへ
2012/04/05(木) 10:29:49.84IIf関数かIf...Then...Else ステートメント
ちなみに標準SQLにはDECODE関数なんて無い
0888営利利用に関するLR審議中@詳細は自治スレへ
2012/04/05(木) 11:11:06.09Choose
http://officetanaka.net/excel/vba/function/Choose.htm
0890営利利用に関するLR審議中@詳細は自治スレへ
2012/04/06(金) 04:53:41.840891営利利用に関するLR審議中@詳細は自治スレへ
2012/04/06(金) 07:29:19.45なんで?
0892営利利用に関するLR審議中@詳細は自治スレへ
2012/04/06(金) 07:32:09.99そんな有名なところだれでも知ってるから
すでに読んでる
0893営利利用に関するLR審議中@詳細は自治スレへ
2012/04/06(金) 08:20:34.61自分が知ってることは他人も全部知ってるべきだと思ってる池沼
0894営利利用に関するLR審議中@詳細は自治スレへ
2012/04/06(金) 10:04:50.920895営利利用に関するLR審議中@詳細は自治スレへ
2012/04/06(金) 19:27:40.21何が「誰でも知っている」だ。
俺はそんなサイト知らねえぞ。
お前のためにあるスレじゃねえから
自己厨レスはやめとけ。
0896営利利用に関するLR審議中@詳細は自治スレへ
2012/04/06(金) 19:30:55.02マイクロソフトみたいな有名なところだれでも知ってるから
すでに読んでる
0897営利利用に関するLR審議中@詳細は自治スレへ
2012/04/07(土) 00:22:42.19Range("A1,B3")をRange(cells(1,1),cells(2,3))でやることってできますか?
試しにコンマ入れてみたけどできませんでした
0898営利利用に関するLR審議中@詳細は自治スレへ
2012/04/07(土) 00:36:09.97Application.Union(Cells(1, 1), Cells(2, 3))
0899897
2012/04/07(土) 00:47:26.65ありがとうございます
0900営利利用に関するLR審議中@詳細は自治スレへ
2012/04/07(土) 03:29:15.390901営利利用に関するLR審議中@詳細は自治スレへ
2012/04/07(土) 05:29:02.44それを2,3年経っても放置している上に、自分と大差ないレベルらしく
読んでても新たな発見とか嬉しい驚きとか全然無いんで全く行かなくなった
0902営利利用に関するLR審議中@詳細は自治スレへ
2012/04/07(土) 07:16:36.620903営利利用に関するLR審議中@詳細は自治スレへ
2012/04/07(土) 07:39:34.18いまそれやると一生無駄にすると思う
0904営利利用に関するLR審議中@詳細は自治スレへ
2012/04/07(土) 08:32:51.50>>>891
>そんな有名なところだれでも知ってるから
google検索なんか利用できないじゃん。有名なところしかヒットしない仕組みなんだもの。
0905営利利用に関するLR審議中@詳細は自治スレへ
2012/04/07(土) 17:05:07.95B2:B12,D2:D12、F2:F12
の用に3行に分けて張り付けたいときは
FOR ....next で繰り返しするしかないのでしょうか?
何か一発で行けるようなスマートなやり方はないでしょうか?
0906営利利用に関するLR審議中@詳細は自治スレへ
2012/04/07(土) 17:31:13.82B2:B12、D2:D12、F2:F12は3行じゃなくて11行だと思うけど?
一発じゃないけどループ使いたくないならこんなのとか
With Range("A1:A30")
Dim v As Variant
v = .Offset(0)
Range("B2:B12") = v
v = .Offset(10)
Range("D2:D12") = v
v = .Offset(20)
Range("F2:F12") = v
End With
0907営利利用に関するLR審議中@詳細は自治スレへ
2012/04/07(土) 17:49:21.59>>B2:B12、D2:D12、F2:F12は3行じゃなくて11行だと思うけど?
確かに・・・
B2:K2、B4:K4、B6:K6の間違いでした。
シート2のA1:A30には不連続のデータが入っていて、
それのA1:A10をB2:K2に
A11:A20をB4:K4に
A21:A30をB6:K6にコピーしたいのです。
>906を試してみると一行に全ておなじデータが入ってしまいました。
0908営利利用に関するLR審議中@詳細は自治スレへ
2012/04/07(土) 18:01:47.39コピペしたら?
Range("A1:A10").Copy
Range("B2").PasteSpecial Transpose:=True
Range("A11:A20").Copy
Range("B4").PasteSpecial Transpose:=True
Range("A21:A30").Copy
Range("B6").PasteSpecial Transpose:=True
0909営利利用に関するLR審議中@詳細は自治スレへ
2012/04/07(土) 19:47:57.72やはりそうするのが無難ですよね。
別件なのですが、Findで検索してヒットしたせるから
10行目までの範囲を指定したい場合はどうしたら
いいですかね?
Offsetを使って色々しているのですが上手くいきません。
0910営利利用に関するLR審議中@詳細は自治スレへ
2012/04/07(土) 19:52:21.42Resizeプロパティ
0911営利利用に関するLR審議中@詳細は自治スレへ
2012/04/07(土) 22:45:34.62サンクス
0912営利利用に関するLR審議中@詳細は自治スレへ
2012/04/08(日) 13:54:16.86OS:XP EXCEL:2007
ユーザーフォームを起動させると、言語バーの輝度が落ちてしまい日本語入力ができなくなります。
F8ポチポチでは再現せず…適当なポイントで止めても再現せず…
一旦エクセル落として開き直せば復帰します。
ユーザーフォームはクラスを使ったカレンダーフォームです
0913営利利用に関するLR審議中@詳細は自治スレへ
2012/04/08(日) 18:30:01.65苦手なのがサブルーチンをいっぱい作ってそれらを効果的に使う方法や、どうやって全体像を把握するのかや、
フォームを駆使して、それをどうやって標準モジュールと連携させるかとか、
変数についてローカル変数やグローバル変数をどう概念的に理解して使いこなすとか
そのへんでつまづいています。
基本的なところ(セル・シート・ブック)は、入門書やすこしレベルが上のものでも、本やサイトでいいのがいっぱいありますが、
「サブルーチン」「フォーム」「変数」とかについてに特化した入門向けから上級者向けの本やサイトがあれば教えてもらえますか?
0914営利利用に関するLR審議中@詳細は自治スレへ
2012/04/08(日) 18:48:40.75[X]で閉じるときもう一回押さないと閉じないんです。
これを回避する方法ありますか?
0915営利利用に関するLR審議中@詳細は自治スレへ
2012/04/08(日) 19:02:50.68>>2
0916営利利用に関するLR審議中@詳細は自治スレへ
2012/04/08(日) 19:03:25.69>>2
0917営利利用に関するLR審議中@詳細は自治スレへ
2012/04/08(日) 19:13:04.47難しく考えすぎ。
「使いこなそう」などと考えるのがおかしい。
VBAはシートと関数で実現が難しい機能が
ある場合の補助手段。
フォームとか面倒くさい機能は使うな。
シートという立派なGUIがあるんだから。
あとルーチンも変数も全部Publicでいいから。
0918営利利用に関するLR審議中@詳細は自治スレへ
2012/04/08(日) 20:58:39.070919営利利用に関するLR審議中@詳細は自治スレへ
2012/04/08(日) 22:57:28.08えっと、そういうのはVB(VB6まで)の入門書を卒業するレベルならいいんだろうけど、
いまさらVB6の本はないからねぇ
>914
アドインにすれば?
0920営利利用に関するLR審議中@詳細は自治スレへ
2012/04/08(日) 23:00:30.69VBAの基本的な文法からきちんと勉強してみれば?
日経BP社の
Microsoft Excel VBA セミナーテキスト [2010/2007/2003対応]
なんてなかなか良い内容だと思ったけど。
0921営利利用に関するLR審議中@詳細は自治スレへ
2012/04/09(月) 00:32:51.14自己解決したので報告
原因はfalseのままでメソッド終了させてたからだったみたい。最後にtrueで戻したら解決した。
お騒がせしました。
0922営利利用に関するLR審議中@詳細は自治スレへ
2012/04/09(月) 01:09:31.32ttp://www.cqpub.co.jp/hanbai/books/MIF/MIFZ201204.htm
う〜ん、「第10章 USB接続によるデータ計測」にひかれて買ってみたんだけど、
「サイエンスキューブ」ってデータロガーをつかうとこんなことができますよ、って説明だけで
期待したもの(WinUSB.dllをエクセルVBAから使うには)とはちょっと違ったなぁ、残念
シリアルポート(MSComm32.ocx)の代わりに使えるかなぁと思ったんだけど
0923営利利用に関するLR審議中@詳細は自治スレへ
2012/04/09(月) 03:58:36.15複数のエクセルファイルを開いている状態で。
ショートカットキーを使ってマクロを実行しているのですが。
アクティブじゃないエクセルファイルのマクロと競合すると言いますか、
他のも実行してしまう状況にあります。
ショートカットキーのキーを変えると作業の円滑さがなくなってしまうので
出来れば同じショートカットキーを使いながら、アクティブなエクセルに
入っているマクロのみを実行したいのですが。何か方法はあるのでしょうか?
0924営利利用に関するLR審議中@詳細は自治スレへ
2012/04/09(月) 04:18:55.01エクセル2003なんですが、条件書式の色つきが3つまでしかできません。
10色ほどしたくて、ぐぐったらここに辿り着いて元となるVBAを見つけました。
ただ、これはシート1のA列が指定になっています。
これを指定の範囲ないにするにはどこをいじればいいのでしょうか。
例えばシート1のC1〜C10を範囲にするにはどうすればいいでしょうか・
http://qanda.rakuten.ne.jp/qa7116283.html
0925営利利用に関するLR審議中@詳細は自治スレへ
2012/04/09(月) 07:58:24.87あんまり綺麗なコードじゃないけど、めんどくさいから最小限の修正で
Sub W()
Dim j As Long
Dim ws2 As Worksheet
Dim r As Range
Dim c As Object
Set ws2 = Worksheets("Sheet2")
Set r = Range("A1:A10") 'ここに色を付けたいセル範囲を書く
If Intersect(r, Columns(1)) Is Nothing Then Exit Sub
Application.ScreenUpdating = False
r.Interior.ColorIndex = xlNone
For Each c In r
If WorksheetFunction.CountIf(ws2.Columns(1), c) Then
j = WorksheetFunction.Match(c, ws2.Columns(1), False)
c.Interior.ColorIndex = ws2.Cells(j, 2).Interior.ColorIndex
End If
Next
Application.ScreenUpdating = True
End Sub
0926営利利用に関するLR審議中@詳細は自治スレへ
2012/04/09(月) 08:01:03.421つ目のIfは削除しないと、A列にしか色が付かない
2つ目のIfもよく見たら不要だな
Sub W()
Dim j As Long
Dim ws2 As Worksheet
Dim r As Range
Dim c As Object
Set ws2 = Worksheets("Sheet2")
Set r = Range("A1:A10") 'ここに色を付けたいセル範囲を書く
Application.ScreenUpdating = False
r.Interior.ColorIndex = xlNone
For Each c In r
j = WorksheetFunction.Match(c, ws2.Columns(1), False)
c.Interior.ColorIndex = ws2.Cells(j, 2).Interior.ColorIndex
Next
Application.ScreenUpdating = True
End Sub
0927営利利用に関するLR審議中@詳細は自治スレへ
2012/04/09(月) 08:09:08.94390行目を超えると、
実行時エラー1004
WorkseetFunctionクラスのmmultプロパティを取得出来ません。
とエラーが出てしまいますが、最終行まで計算させる方法をご教示下さい。
Dim myA As Range
Dim myB As Range
Dim myC As Range
Dim l As Long
Dim m As Long
Dim n As Long
Dim lLoopTimes
Dim i As Long
Set myA = Range("Sheet1!D3")
Set myB = Range("Sheet2!C2")
Set myC = Range("Sheet1!DN3")
l = 1
m = 111
n = 14
lLoopTimes = 1194
For i = 1 To lLoopTimes
myGetMatrix(myC, l, n).FormulaArray _
= WorksheetFunction.MMult( _
myGetMatrix(myA, l, m), _
myGetMatrix(myB, m, n))
l = l + 1
Next
End Sub
0928営利利用に関するLR審議中@詳細は自治スレへ
2012/04/09(月) 08:22:37.45Sheet1かSheet2のどこかに数値の入ってないセルがあるんじゃない?
0929営利利用に関するLR審議中@詳細は自治スレへ
2012/04/09(月) 08:29:51.78そのプログラムだと、Sheet1!D3:DJ1196とSheet2!C2:P112が計算に使われる
この範囲内に数値の入っていないセルとか結合されたセルがあるとエラーになる
0930営利利用に関するLR審議中@詳細は自治スレへ
2012/04/09(月) 08:54:42.65>929
チェックしてみましたが空白は無い様です。
また試しに、ループを外し、
l = 300、l = 600とマクロを300行分ずつ書き換え、順次実行していくと問題無く最終行まで行きました。
出来れば1つのマクロで終わりにしたいのですが、
何か良い方法はありませんでしょうか・・・。
0931営利利用に関するLR審議中@詳細は自治スレへ
2012/04/09(月) 09:50:47.36Public inTest As Integer
と宣言してるのに
標準モジュールではその変数を使えないのはどういうこと?
別の標準モジュールにならPublic inTest As Integerと宣言してたら使えるのに。
0932営利利用に関するLR審議中@詳細は自治スレへ
2012/04/09(月) 09:56:43.94フォームモジュールではinTestの変数は使えるんですよ。
おかしくね?
0933営利利用に関するLR審議中@詳細は自治スレへ
2012/04/09(月) 09:57:37.34ということは標準モジュールが一番えらいの?
0934営利利用に関するLR審議中@詳細は自治スレへ
2012/04/09(月) 10:17:37.12する方法ってありますでしょうか?
普通に読み込んで行列を挿入しているのですが、スマートな方法があれば教えて下さい。
環境はwinxp+Excel2003です。
宜しく御願いします。
0935営利利用に関するLR審議中@詳細は自治スレへ
2012/04/09(月) 10:20:15.49普通のWorksheet関数として使おうとしても使えないんですけど。
どうやれば使えるようになりますの?
(普通にシートにFunctionを書けばそのシートではWorksheet関数として使えるけど)
ヤバくない?
0936営利利用に関するLR審議中@詳細は自治スレへ
2012/04/09(月) 10:28:09.14行列を挿入するよりカトペの方が手間は少ないのでは
「テキストファイルの読み込み」を使えば好きな場所に読み込めるけど、位置を決めるまでに何度も「次へ」ボタンを
押さなきゃいけないからあんまりスマートとは言えないような気がする
一発で処理したいならマクロ
0937営利利用に関するLR審議中@詳細は自治スレへ
2012/04/09(月) 11:16:08.23無理
そういうときはアドインにする
0938営利利用に関するLR審議中@詳細は自治スレへ
2012/04/09(月) 11:35:10.56さっきから出ている「アドイン」とは何でござるっすの?
0939営利利用に関するLR審議中@詳細は自治スレへ
2012/04/09(月) 11:45:29.76Excelのヘルプで「アドイン」で検索するか、各種検索エンジンで「Excel アドイン」で検索したらいいと思うよ
0940営利利用に関するLR審議中@詳細は自治スレへ
2012/04/09(月) 11:46:30.60あっ!ありがとうございます。
0941営利利用に関するLR審議中@詳細は自治スレへ
2012/04/09(月) 11:54:37.72ここで条件によってExit Subしてるから、C1〜C10の範囲じゃなければExit Subするようにすればいい
If Intersect(Target, Columns(1)) Is Nothing Then Exit Sub
0942営利利用に関するLR審議中@詳細は自治スレへ
2012/04/09(月) 11:56:34.73どのイベントを使えばいいのでしょうか?
どなたか教えて下さい。
0943営利利用に関するLR審議中@詳細は自治スレへ
2012/04/09(月) 12:32:54.00残念ながらありません
監視する仕組みを自作するしかありません
0944営利利用に関するLR審議中@詳細は自治スレへ
2012/04/09(月) 15:04:28.95フォームでPublic宣言したものは
フォーム.変数名
で使える。
標準モジュールのは
標準モジュール.変数名でアクセスできるが
省略できるだけ
0945営利利用に関するLR審議中@詳細は自治スレへ
2012/04/09(月) 21:46:22.98かなり便利だ。
0946営利利用に関するLR審議中@詳細は自治スレへ
2012/04/09(月) 23:07:19.96詳しくお願います
0947営利利用に関するLR審議中@詳細は自治スレへ
2012/04/09(月) 23:11:11.65ブック全体?でキーを受け付ける方法はないでしょうか?
マクロ実行後、オペレーターが画面を確認して、エンターを押したら、
再度マクロが走るようにしたいのです。
ググってもTextboxに対してだったり、セルへの入力時の例ばかりで
目的の物とは違うので教えて下さい。
宜しく御願いします。
0948営利利用に関するLR審議中@詳細は自治スレへ
2012/04/09(月) 23:11:16.53Outlookのメールに添付して
しかもそのメールの差出人・件名・本文(数行以上に渡る文章)もVBAで書いて
送信ボタンを押す直前の状態までExcelのVBAで作ることは可能ですか?
Yなら、どうやりますか?
0949948
2012/04/09(月) 23:12:45.900950営利利用に関するLR審議中@詳細は自治スレへ
2012/04/09(月) 23:22:12.11Application.OnKeyメソッド
0951営利利用に関するLR審議中@詳細は自治スレへ
2012/04/09(月) 23:24:55.96>送信ボタンを押す直前の状態までExcelのVBAで作ることは可能ですか?
可能
>Yなら、どうやりますか?
>>2
0952945
2012/04/09(月) 23:51:26.07たとえば、宣言部で
Private Type AAA
BBB As String
CCC As String
End Type
Private Type ZZZ
DDD As AAA
EEE As String
End Type
としてやる。
で、プロシージャ内でユーザー定義変数を宣言。
すると、あまり意識せずに多次元配列状態を作り出せる。
Dim A As ZZZ
A.EEE= "文字列"
A.DDD.BBB="入れ子になってる"
A.DDD.CCC="これも"
With A
Debug.Print .EEE
With .DDD
Debug.Print .BBB
Debug.Pring .CCC
End With
End With
この例だとしょぼいけど、似たような内容の変数が
10個も20個も出てくるときにものすごく整理しやすい。
0953営利利用に関するLR審議中@詳細は自治スレへ
2012/04/09(月) 23:52:18.64出来ました。
ありがとうございました。
0954営利利用に関するLR審議中@詳細は自治スレへ
2012/04/10(火) 10:47:52.39トマトは、野菜ですか果物ですか?
バナナはおやつに入りますか?
0955営利利用に関するLR審議中@詳細は自治スレへ
2012/04/10(火) 10:50:11.61バナナは果物です
0956営利利用に関するLR審議中@詳細は自治スレへ
2012/04/10(火) 12:40:48.54おやつやデザートとして食べるのが果物。
おかずとして食べるのが野菜。
0957営利利用に関するLR審議中@詳細は自治スレへ
2012/04/10(火) 12:43:10.21実際に見たことは無い
0958営利利用に関するLR審議中@詳細は自治スレへ
2012/04/10(火) 19:29:34.770959営利利用に関するLR審議中@詳細は自治スレへ
2012/04/11(水) 00:10:58.620960営利利用に関するLR審議中@詳細は自治スレへ
2012/04/11(水) 16:53:30.86また、そのフォルダにあるExcelファイルを開かずにその中のセルにある値をいくつか取り出すことは可能ですか?
0961営利利用に関するLR審議中@詳細は自治スレへ
2012/04/11(水) 17:07:23.19> ある特定のフォルダ(例えば、デスクトップ\Test\A01\)にあるExcelファイルだけを開くにはどうすればいいですか?
Workbooks.Open filename:="c:\foo\bar.xls"
で特定のフォルダの特定のブックが開ける
> また、そのフォルダにあるExcelファイルを開かずにその中のセルにある値をいくつか取り出すことは可能ですか?
不可能
0962営利利用に関するLR審議中@詳細は自治スレへ
2012/04/11(水) 18:00:41.70「Excelファイルを開かずに」の「開く」の定義をもうちょっと明確にしないと答えられないよ
0963営利利用に関するLR審議中@詳細は自治スレへ
2012/04/11(水) 18:21:46.56いや、そのフォルダにあるExcelファイルを全部開くという意味です。
そのときによってファイル名は毎回違う、みたいな。
0964営利利用に関するLR審議中@詳細は自治スレへ
2012/04/11(水) 18:25:47.31Dir関数使えばいいよ
0965営利利用に関するLR審議中@詳細は自治スレへ
2012/04/11(水) 18:45:17.49そのDir関数はなんのための関数?どうやって使うの?
0966960
2012/04/11(水) 18:45:46.250967営利利用に関するLR審議中@詳細は自治スレへ
2012/04/11(水) 18:55:55.94お前のExcelにはヘルプが無いのか?ネットに接続できるのにgoogleにはアクセス出来んのか?
0968営利利用に関するLR審議中@詳細は自治スレへ
2012/04/11(水) 19:03:23.940969営利利用に関するLR審議中@詳細は自治スレへ
2012/04/11(水) 19:16:03.910970営利利用に関するLR審議中@詳細は自治スレへ
2012/04/11(水) 19:24:04.950971営利利用に関するLR審議中@詳細は自治スレへ
2012/04/11(水) 19:52:41.87それ以外の使い方は全部邪道
0972デフォルトの名無しさん
2012/04/11(水) 20:40:11.410973デフォルトの名無しさん
2012/04/11(水) 21:18:22.13エクセでやってる奴ってその程度のお金も出せない貧乏人なの?
0974デフォルトの名無しさん
2012/04/11(水) 22:11:36.360975デフォルトの名無しさん
2012/04/11(水) 22:12:54.750976デフォルトの名無しさん
2012/04/11(水) 22:24:07.490977デフォルトの名無しさん
2012/04/12(木) 01:04:05.310978デフォルトの名無しさん
2012/04/12(木) 10:01:49.86exdファイルを削除してね!
ttp://support.microsoft.com/kb/2664258/
To resolve this issue, you must delete the cached versions of the control type libraries (extender files) on the client computer.
To do this, you must search your hard disk for files that have the ".exd" file name extension and delete all the .exd files that you find.
These .exd files will be re-created automatically when you use the new controls the next time that you use VBA.
These extender files will be under the user's profile and may also be in other locations, such as the following:
C:\documents and settings\username\Application Data\Microsoft\Forms
C:\documents and settings\username\AppData\Local\Temp\VBE
0979デフォルトの名無しさん
2012/04/12(木) 10:33:50.90別々のブックで同じマクロ処理をしたいので、現在はコピーしながら
使っているのですが、マクロの内容が変更になりそうなので
今のうちに共有出来るなら作っておこうと思いまして。
宜しく御願いします。
0980デフォルトの名無しさん
2012/04/12(木) 10:59:29.01違う様な気がするけどこういうこと?
http://www.moug.net/tech/exvba/0010018.html
0981デフォルトの名無しさん
2012/04/12(木) 11:32:55.50ありがとうございます。
ググったら
http://d.hatena.ne.jp/language_and_engineering/20090731/p1
こんなのがあって、中身が理解出来ていないのですが、
こちらの方が希望に合ってると思いました。
0982デフォルトの名無しさん
2012/04/12(木) 11:36:16.320983デフォルトの名無しさん
2012/04/12(木) 11:53:32.18選択写真の縮小と圧縮をワンボタンで実行したいのですが、圧縮の方が機能しないのでヒントください。
マクロの記録(図の書式設定から圧縮)でできたコードで、
図のトリミング部分を削除するのチェックを外してマクロ記録したけど、それが実行されてない。
手動でするとデータサイズが900KB→150KBになるが、マクロ実行では900KBのまま。
Sub 写真圧縮()
On Error GoTo ErrorCheck
Selection.ShapeRange.PictureFormat.Brightness = 0.5
Selection.ShapeRange.PictureFormat.Contrast = 0.5
Selection.ShapeRange.PictureFormat.ColorType = msoPictureAutomatic
Selection.ShapeRange.PictureFormat.CropLeft = 0#
Selection.ShapeRange.PictureFormat.CropRight = 0#
Selection.ShapeRange.PictureFormat.CropTop = 0#
Selection.ShapeRange.PictureFormat.CropBottom = 0#
ErrorCheck:
MsgBox "写真を選択"
End Sub
トリミング部分削除のチェックを外した方がサイズが小さくなるのも疑問だけど、よろしくお願いします。
0984デフォルトの名無しさん
2012/04/12(木) 12:06:58.32excel vba 図 圧縮
でググる
0985983
2012/04/12(木) 13:18:54.90レスありがとうございます。
書く前に一応検索して、いろいろ試してみたのですが、自分の思うようにいかず(理解できず)、
結局シンプルな組み合わせが理想だったので>>983の方法を選びました。
縮小の方↓はうまくいき、最終的にこれら二つを組み合わせようと考えてます。
Sub 写真縮小()
On Error GoTo ErrorCheck
Selection.ShapeRange.LockAspectRatio = msoTrue
Selection.ShapeRange.Height = 232.5
Selection.ShapeRange.Width = 309.75
Exit Sub
ErrorCheck:
MsgBox "先に写真の選択"
End Sub
0986デフォルトの名無しさん
2012/04/12(木) 19:22:48.64また、そのフォルダにあるExcelファイルを開かずにその中のセルにある値をいくつか取り出すことは可能ですか?
0987デフォルトの名無しさん
2012/04/12(木) 19:31:39.020988デフォルトの名無しさん
2012/04/12(木) 19:41:29.780989986
2012/04/12(木) 19:43:58.230990デフォルトの名無しさん
2012/04/12(木) 19:53:25.65連想配列使いたくて
Set dic = CreateObject("Scripting.Dictionary")
こうしても「変数が定義されていません」とエラーが出るんだけど、何がいけないの?
0991デフォルトの名無しさん
2012/04/12(木) 20:33:28.010992デフォルトの名無しさん
2012/04/12(木) 20:57:14.540993デフォルトの名無しさん
2012/04/12(木) 22:25:54.700995デフォルトの名無しさん
2012/04/13(金) 16:31:49.57下記のようなvbスクリプトをネットで拾って使ったのですが、Auto_Openが実行されません。(ブックは表示されます。)
Option Explicit
Dim objExcelApp, strPath
Const BookName = "hoge.xls"’実行するファイル
Set objExcelApp = CreateObject("Excel.Application")
With WScript
strPath = Replace(.ScriptFullName, .ScriptName, "")
End With
objExcelApp.Workbooks.Open strPath & BookName, False, False
objExcelApp.Visible = True
Set objExcelApp = Nothing
ファイルをクリック等で開くと実行されるのでマクロ自体は間違いないと思うのですが、
このスクリプトがおかしいのか、何かエクセル側で設定する項目があるのか
教えて下さい。
環境はExcel2003+XP SP3です。
宜しく御願いします。
0996995
2012/04/13(金) 17:00:21.61Auto_Openを実行するには RunAutoMacros の記述が必要でした。
スレ汚し、済みません。
0997デフォルトの名無しさん
2012/04/13(金) 17:01:26.67http://www.excel.studio-kazu.jp/mag2/backnumber/mm20040817.html
0998デフォルトの名無しさん
2012/04/13(金) 17:18:38.00*やりたいこと*
シート内のセル設定情報をテキストで保存して、読み出し
→帳票のテキストデータ化
*必要なこと*
セルに設定された各種プロパティの保存
*知りたいこと*
プロパティがデフォルト以外に変更されたセルを発見する方法
構造体だかクラスだか設定して該当範囲の一括調査・設定するしかないのだろうか
0999デフォルトの名無しさん
2012/04/13(金) 17:19:44.16http://toro.2ch.net/test/read.cgi/tech/1334305148/
1000デフォルトの名無しさん
2012/04/13(金) 17:23:45.82もっと具体的に書かないと第三者には伝わらないよ
とりあえず>>2を読み返して質問し直した方がいい
10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。