Excel VBA質問スレ Part13
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2009/09/30(水) 12:25:0401 http://pc11.2ch.net/test/read.cgi/tech/1054356121/
02 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/
0002デフォルトの名無しさん
2009/09/30(水) 13:09:23前スレ http://pc11.2ch.net/test/read.cgi/tech/1054356121/
★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デフォルトの名無しさん
2009/09/30(水) 13:12:29前スレ
Sleep 1
の1はミリ秒だから、1秒なら1000を指定ね。
0004デフォルトの名無しさん
2009/09/30(水) 17:22:10どのようにコードを書き直せばよいのでしょうか教えてください。
XPsp3におけるIE8ブラウザにおいてinput=file型のフォームにファイル名を入力するものです。
以下コードです。
Sub PageUpCSV(objIE As Object)
With objIE
.Visible = True
'fileの入力 form name =CSVFile
.Document.all.CSVFile.Select 'ファイル入力窓を開く
Application.SendKeys " C:\test.txt ", True 'ダイアログにファイル名を送信
'Application.SendKeys "%o", True 'ALT+oを送信=ダイアログの開くをクリック
'
.
. その他処理
.
End With
End Sub
2007だとどうしてもC:\test.txtがダイアログに記入されません。空白のままです。
初めての2ch書き込みで失礼があるかもしれませんが、どうかお力を貸してください
0005デフォルトの名無しさん
2009/09/30(水) 18:04:28OSとIEのバージョンは、どっちの環境でもXP SP3にIE8で同じ?
0006デフォルトの名無しさん
2009/09/30(水) 18:15:07はい,どちらもXP SP3 IE8です。
0007デフォルトの名無しさん
2009/09/30(水) 18:26:52キー入力の前に、ちゃんとページの表示が完了するまで待つようになってる?
0008デフォルトの名無しさん
2009/09/30(水) 18:42:46Sub WAIT(myTime As Single)
Dim TSTART As Single
TSTART = Timer
Do
DoEvents
Loop Until TSTART + myTime < Timer
End Sub
や
Do While .Busy = True And .ReadyState <> 4
DoEvents
Loop
をダイアログが開く前後に入れて色々チェックをしてみたのですが開いたダイアログにはカーソルが行くだけで値が入りません。
値が入ってから消えているわけではないようです。
0009デフォルトの名無しさん
2009/09/30(水) 19:42:08手作業と同じようにやってるのか?
0010デフォルトの名無しさん
2009/09/30(水) 19:55:58手作業ではできますし、手作業同様の指示をだしているつもりです。
ダイアログが開くまでは期待通りの動きをしています。
Select以降にwaitを15秒とってもダイアログには何も記入されません。
0011デフォルトの名無しさん
2009/10/01(木) 16:12:31自社で2007をインストールして試したところ、vbaはきちんと動きました。
verの問題ではなかったようです。今のところ何か常駐ソフト等が原因なのではと考えています。
ありがとうございました。
0012デフォルトの名無しさん
2009/10/01(木) 20:17:45SOFT EXCEL2007
1つのブックに300近いシートがあり、これを串刺し演算したいです
しかしピボットテーブルを使おうと思っても4シートしか串刺しできません
vbaではとんでもない行数になると思います
こういう場合どうすればいいかヒントを下さい
0013デフォルトの名無しさん
2009/10/01(木) 20:26:15たとえばシートが300枚あったとして、全シートのセルA1の合計ならこういう式
=SUM(Sheet1:Sheet300!A1)
で一発で求められるけど、それ以外にどういう計算をしたい?
0014デフォルトの名無しさん
2009/10/01(木) 21:30:24情報は商品番号(100種以上)と数量だけなんですが商品番号がランダムに並んでるんです
串刺ししつつ商品の合計を出したいのです
そんなのできますか?
0015デフォルトの名無しさん
2009/10/01(木) 21:50:36【2 Excelのバージョン 】 Excel2003
【3 VBAが使えるか .】 勉強中
【4 VBAでの回答の可否】 可 よろしくお願いします。
VBAで
= Application.WorksheetFunction.Average(Worksheets("sheet1").Range(Cells(1, 3), Cells(10, 3)))
のように average でC1からC10まで求めるやり方ははかりました、
A3、A6、A9、A12 「Cells(1,h*3)」 のような飛び飛びのセルを
average したいのですがどのようにすればよいですか?
教えてください。よろしくお願いします。
0016デフォルトの名無しさん
2009/10/01(木) 21:52:18現状の体裁を変えないならVBAでも変数に格納するなり
出来ることは出来る
0017デフォルトの名無しさん
2009/10/01(木) 22:00:37複数のシートタブをShiftを押しながら指定する方法だと4枚までしか集計できない。
それじゃなくて、ピボットテーブルウィザードから「範囲の追加」を使えば
300枚のシートに別れたデータをいっぺんに集計できるようにはなる。
ttp://office.microsoft.com/ja-jp/excel/HA102265851041.aspx
けど、入力にめっちゃ手間がかかる。
VBAでピボットテーブルを作るのが早いと思う。
0018デフォルトの名無しさん
2009/10/01(木) 22:25:37ありがとうございます
頑張ってみます。
0019デフォルトの名無しさん
2009/10/02(金) 00:03:19Sheet1に列固定、行不定の約10000行ほどのデータを加工して
Sheet2に表示させたいのですが、馬鹿正直にfor文とかでまわして
セルに格納していってたら、処理速度がえらいことになりました。
非表示や再計算を手動化等やってみたのですが、やはりまだまだ遅いです。
何か良い案は無いでしょうか?よろしくお願いいたします。
0020デフォルトの名無しさん
2009/10/02(金) 00:09:01配列(myRow,0) とか作って、
range("B1:B" & myRow) = 配列 ←配列(,)じゃ無くて括弧なしの「配列」
で超高速
0021デフォルトの名無しさん
2009/10/02(金) 00:14:40ご教示ありがとうございます。
カッコ無しの配列ですね。試してみます!
0022デフォルトの名無しさん
2009/10/02(金) 00:27:58配列(myRow,0) = cells(myRow,2) ' 配列にB列のセルを格納
next
こうやって格納した後にだな、いちおう
0023デフォルトの名無しさん
2009/10/02(金) 02:12:29処理速度を10分の1程度まで落とすことができました!
あとはデータ加工部分での処理等をもっと軽くできないかやってみます。
アドバイス、ありがとうございました。
0024デフォルトの名無しさん
2009/10/02(金) 04:46:07全然違う。
セル2個以上の範囲のValueプロパティは2次元配列なので、それをVariant型変数に格納してからアクセスすればよい。
002519
2009/10/02(金) 06:46:59私が現在行っている方法で問題がある場所があればご指摘ください。※重要な場所のみ記載します
Dim C() As Variant
Dim output As Variant
'データ行数の確認
myRow = 1
Do While Sheets(1).Cells(myRow, 1) <> ""
myRow = myRow + 1
Loop
’配列サイズの確定
ReDim C(datasize - 1, 56)
'データ加工(実際はもっと色々やっています)
For i = 1 To myRow '行
For j = 1 To 10 '列
Select Case j
Case 1 To 5
output = Sheet(1).Cells(i, j)
Case 6 To 10
work = Sheet(1).Cells(i, j)
output = Sheets(2).Cells(work + 2, 3)
End Select
C(i - 1, j - 1) = output
Next j
Next i
'加工完了。データをセルに格納
Sheets(3).Range("B5:B" & myRow, "J5:J" & myRow) = C
0026デフォルトの名無しさん
2009/10/02(金) 06:49:58この例ではReDim C(myRow - 1, 10)の間違いでした。失礼しました。
0027デフォルトの名無しさん
2009/10/02(金) 07:45:50いいことだ。
0028デフォルトの名無しさん
2009/10/02(金) 08:46:13落札者と入札額の取得をしエクセルのセルに書き込もうと考えています。
WEBクエリを使ったところ 何回か動かすと
真っ白い画面になって まったく取得できなくなります。
試しにIEなどブラウザで開いてみると 特に問題なくページを開くことができます。
真っ白にならないいい方法はありますでしょうか・・・?
OSは XP でIE8 Office2007
と Vista IE8 Office2007
を使用しています。
0029デフォルトの名無しさん
2009/10/02(金) 08:47:55AuctionPageID = "http://page.auctions.yahoo.co.jp/jp/show/bid_hist?aID=" & ActiveCell.Offset(0, 1).Text
Workbooks.Add
page = pageID
With ActiveSheet.QueryTables.Add(Connection:="URL;" + AuctionPageID, Destination:=Range("A1"))
.Name = "..."
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.WebSelectionType = xlEntirePage
.WebFormatting = xlWebFormattingNone
.WebPreFormattedTextToColumns = True
.WebConsecutiveDelimitersAsOne = True
.WebSingleBlockTextImport = False
.WebDisableDateRecognition = False
.WebDisableRedirections = False
.Refresh BackgroundQuery:=False
End With
どうぞよろしくお願い致します。
0030デフォルトの名無しさん
2009/10/02(金) 17:59:535秒くらい待機したら問題ないことがある
0031デフォルトの名無しさん
2009/10/02(金) 19:06:290032デフォルトの名無しさん
2009/10/02(金) 19:12:54ACCはレコードアクセスが基本になる上、ADOだとか使う必要がある
0033デフォルトの名無しさん
2009/10/02(金) 21:22:43エクセル2003です。VBA
VBAで、
A1:A100 で "月" と表示のあるもの かつ
range(cells(10,h*3),cells(100,h*3)) で0より大きいものを
平均したいのですが、、、
sub k()
if If Range("A1:A100") = "月" Then
この先がわかりません。教えてください。お願いします。
”〜かつ〜”のVBAでの表現法がわかりません。
0034デフォルトの名無しさん
2009/10/02(金) 21:49:53それともVBAを使うことが目的なの?
このケースだとかなり基本的なことから説明しなくちゃだから、後者なら大変なんだが
0035デフォルトの名無しさん
2009/10/02(金) 22:04:00後者です。
VBAでの答えをよろしくお願いします。
説明は大変ということなのでいりません。
VBAの本があるのでそれで調べて見ます。
本当に知りたいのはVBAで、
IFで真のときにさらにもう一回IFで違う条件でかける方法です。
0036デフォルトの名無しさん
2009/10/02(金) 22:16:58「”〜かつ〜”のVBAでの表現法」とのことですので、下のサンプルを参考にしてください。
Sub msgTest()
' セルA1に「メッセージ」かつ、B1に「表示する」と入力されている場合にメッセージ表示。
If (Cells(1, 1).Value = "メッセージ") And (Cells(1, 2).Value = "表示する") Then
MsgBox "2条件とも満たしている"
End If
End Sub
0037デフォルトの名無しさん
2009/10/02(金) 22:43:04演算子で繋いでも良いけど、ネスティングで良いと思うよ。
if a = 1 then
if b = 1 then
if c = 1 then
msgbox "aaa"
end if
end if
end if
0038デフォルトの名無しさん
2009/10/02(金) 23:27:12★5 レベルはどうあれ、ここはプログラマ用の板スレです。プログラマとは、自分でプログラムを組み
コードを書く人の事なので、自分でやるきは全く無く、丸投げしようって人はお断りです。
ヒントを貰えばあとは自力でなんとかしますって人のみどうぞ。
丸投げならEXCEL相談室へどうぞ
その前に、CELLSの使い方の再確認を
http://www.happy2-island.com/excelsmile/smile03/capter00501.shtml
0039デフォルトの名無しさん
2009/10/03(土) 00:50:560040デフォルトの名無しさん
2009/10/03(土) 03:04:59演算子でつなげるものと同じ意味のIfネストは、なんだか格好悪いよね。
0041デフォルトの名無しさん
2009/10/03(土) 03:06:400043デフォルトの名無しさん
2009/10/03(土) 08:49:120044デフォルトの名無しさん
2009/10/03(土) 10:29:10条件を外したいときは先頭に ' 入れてコメントにすればいいだけだし、
動作テストで条件を変えて試したい時とかよく使う
0045デフォルトの名無しさん
2009/10/03(土) 11:18:50そういえばAndじゃなくOr判定で以前、
Select Case i Mod 10
Case 1 ,6 ,7
'処理
と
j = i Mod 10
If j = 1 Or j = 6 Or j =7 Then
'処理
この二者の比較で後者が速いというやついたのでかみついたことがあるが、その後Core 2 Duoのパソコンで試したら
たしかに彼が言うように条件が3個のときはOrが速かった。
ただし条件が4個以上は短絡評価のSelect Caseが速いようだけど。
一昔前のパソコンなら条件が3個でもSelect Caseが速いんだけどな。
0046デフォルトの名無しさん
2009/10/03(土) 11:38:11どのくら速かった?
0047デフォルトの名無しさん
2009/10/03(土) 12:28:150048デフォルトの名無しさん
2009/10/03(土) 12:53:42あとVBAって、右辺だけの演算子結合出来ないよね?確か。
if a=1 or a=2 or a=3 then
だよね、確か。
if a=1 or 2 or 3 then
でエラー吐き出して、最初のころ原因が分からなくて相当悩んだ記憶が。
0049デフォルトの名無しさん
2009/10/03(土) 13:54:450050デフォルトの名無しさん
2009/10/03(土) 14:48:26If 0 < Month <=12 then
Debug.Print Month
Else
Debug.Print False
End If
End Sub
0051デフォルトの名無しさん
2009/10/03(土) 16:41:50>if a=1 or 2 or 3 then
>でエラー吐き出して、最初のころ原因が分からなくて相当悩んだ記憶が。
本当にエラー吐いたの?、その条件だとa=1が真でも偽でも2と3が真だから
必ず真になってエラーにはならないと思うけど・・・
0052デフォルトの名無しさん
2009/10/03(土) 17:46:54それで動くと思ってるのは他の言語も経験したことないんだろ?
クラス継承ができないとか、ポインタ使えないとか範囲コメントできないとかならともかく・・・
0053デフォルトの名無しさん
2009/10/03(土) 19:57:28速度厨とか何を言ってるんだ
0054デフォルトの名無しさん
2009/10/03(土) 19:59:36個人的にはショートサーキットの有無で結果の変わるようなコーディングは避けるべきだと思う
>>51
俺は>48ではないが
昔のVBAだと確かエラーになってた気がするんだが
今エクセルの2007で試したらエラーにならないな
まあ、>48が思ってる通りには評価されてないんだが
0055デフォルトの名無しさん
2009/10/03(土) 21:09:02If tmpSheet.Range("B" & r).Value <> tmpSheet.Range("B" & r + 1).Value Then '次のB列の値が違っていたら
book.SaveAs dataFolder & "\" & tmpSheet.Range("B" & r).Value '集計ブックを作業シートのB列の値(シート名)で保存
book.Close False '集計ブックを閉じる
isOpen = False '集計ブックが開いているかフラグを閉じているにする
End If
0056デフォルトの名無しさん
2009/10/03(土) 21:47:020057デフォルトの名無しさん
2009/10/04(日) 06:15:540058デフォルトの名無しさん
2009/10/04(日) 06:27:10If tmpSheet.Range("B" & r).Value <> tmpSheet.Range("B" & r + 1).Value Then '次のB列の値が違っていたら
book.SaveAs dataFolder & "\" & tmpSheet.Range("B" & r).Value & ".xlsm", '集計ブックを作業シートのB列の値(シート名)で保存
book.Close False '集計ブックを閉じる
isOpen = False '集計ブックが開いているかフラグを閉じているにする
End If
0059デフォルトの名無しさん
2009/10/04(日) 09:29:33フォーム上のテキストボックスの数を数えるには、
どのようにすればよいでしょうか。
Controlsの引数は"名前"と"番号"なので種類が指定できないし、
GettypeはVBAでは使えないようで悩んでいます。
0060デフォルトの名無しさん
2009/10/04(日) 11:31:23TypeName 使ってみてはどうですか
0062デフォルトの名無しさん
2009/10/04(日) 21:10:56VBAを始めたばかりで、全然わからないので、
ここで質問させてください!!
A列に"リンゴ"と書かれたセルがあれば、
そのセルと隣のセルを切り取って、貼り付け用のセルに貼り付ける。
なければ、何もしないという構文を書きたいんです。
IF is nothingを使うのかなぁと思ったのですが、
どこに入れればいいのかわからなかったので。。。
ちなみに、貼り付け用のセルに貼り付けた後、
空白になったそのセルを切り取るっていう構文も入れて、
その時に、IFを使っています。
以下に構文を記載しますので、どうしたらいいか教えてください!
よろしくお願いいたします!!!!!
Dim myLastLow as Long
Dim i as Long
Columns(1).Find("りんご").Resize(, 2).Cut Sheets("Sheets1").Columns(1).Find("貼り付け用")
myLastLow = Range("A30").End(xlUp).Row
For i = myLastLow To 1 Step -1
If Cells(i, 1).Value = "" Then
Range("A" & i & ":B" & i).Delete shift:=xlShiftUp
End If
Next i
0063デフォルトの名無しさん
2009/10/04(日) 21:26:33for i = 1 to cells(65536,1).end(xlup).row
if cells(i,1).value = "りんご" then
'コピペ処理
end if
next
0064デフォルトの名無しさん
2009/10/04(日) 22:31:45ありがとうございます!!
早速やってみたんですが、
「プロシージャの呼び出し、または引数が不正です」とエラーが
出てしまいました。。。
なぜでしょう。。。
Columns(1).Find("りんご")…
というところでエラーが出てるっぽいです。
0065デフォルトの名無しさん
2009/10/04(日) 22:52:55Columns(1).Find("りんご").Resize(, 2).Cut Sheets("Sheets1").Columns(1).Find("貼り付け用")
この構文だとA列に"りんご"と記入されたセルが存在しないと実行時エラーになるよ
あとシートは指定した方がいいとおもうよ
Set A = Sheets("Sheet2").Columns(1).Find("りんご")
If Not A Is Nothing Then
Set A = A.Resize(, 2)
A.Cut Sheets("Sheets1").Columns(1).Find("貼り付け用")
End If
上記例でも"Sheets1"のA列に"貼り付け用"と記入されたセルが存在しないと実行時エラー
になると思うけど例を参考にがんばってみてください。
あと >>64で出てるえらーって
"Sheets1"のA列に"貼り付け用"と記入されたセルが存在しないんじゃないの
0066デフォルトの名無しさん
2009/10/04(日) 22:59:56解決しました!!65さんの言っているとおりでした!
すいません。私が書いてなかったのが悪かったんですが、
"貼り付け用"というセルは表の一番下にあるんです。
一度"りんご"のセルがあって、実行されちゃうと、
もう"貼り付け用"というセルがなくなってしまうことが原因でした!
なので、Forを一番下から上にあがるような構文を書いたら
エラーが出なくなりました!
ありがとうございました!!
0067デフォルトの名無しさん
2009/10/04(日) 23:15:00もう一つ教えてもらってもいいですか?
もし"りんご"というセルがなかったら、
"貼り付け用"と書かれたセルとその隣のセルを削除したいのですが、
どのように書けばいいですか?
elseを使うんだろうなぁと思って、
Else
Columns(1).Find("貼り付け用").Resize(, 2).Delete shift:=xlShiftUp
を入れてみたんですが、エラーになっちゃいました。。。
お時間があれば教えてください!よろしくお願いします。
0068デフォルトの名無しさん
2009/10/04(日) 23:19:190069デフォルトの名無しさん
2009/10/05(月) 00:11:510070デフォルトの名無しさん
2009/10/05(月) 00:19:37見つかりませんってエラーが出るんだから、on error goto で飛ばしたら?
0071デフォルトの名無しさん
2009/10/05(月) 00:56:27> Columns(1).Find("貼り付け用").Resize(, 2).Delete shift:=xlShiftUp
上の1行だけ試しに実行させたら正常に動いたので、
If〜Else〜End Ifの構文が正しく書けていない気がします。下はサンプル。
Set A = Sheets("Sheet1").Columns(1).Find("りんご")
Set B = Sheets("Sheet1").Columns(1).Find("貼り付け用")
'-- 「B is Nothing」な場合の処理は割愛
If A Is Nothing Then
B.Resize(, 2).Delete shift:=xlShiftUp
Else
Set A = A.Resize(, 2)
A.Cut B
End If
0072デフォルトの名無しさん
2009/10/05(月) 01:10:09エクセル97で試したけどエラーにならないな
VBなら言語仕様的にはエラーになどならないはずだがな、間違った演算してるわけじゃないしな
a=1が真の場合は分り易く8ビットで表現すると11111111となる
次に11111111と00000010(十進数の2)をor演算すると11111111となる、
次に11111111と00000011(十進数の3)をor演算すると11111111となり、
すべて演算した結果は真となり、エラーにはならない
a=1が偽の場合は分り易く8ビットで表現すると00000000となる
次に00000000と00000010(十進数の2)をor演算すると00000010となる、
次に00000010と00000011(十進数の3)をor演算すると00000011となり、
すべて演算した結果は真となり、エラーにはならない
よってif a=1 or 2 or 3 thenの条件式は必ず真になるでしょ
0073デフォルトの名無しさん
2009/10/05(月) 01:26:21りんごが無かったら削除するんじゃなくて
りんごがあったら追加する仕様の方がいい希ガス
0074デフォルトの名無しさん
2009/10/05(月) 01:30:233
3と計算されるね
0075デフォルトの名無しさん
2009/10/05(月) 02:06:500076デフォルトの名無しさん
2009/10/05(月) 03:18:190077デフォルトの名無しさん
2009/10/05(月) 11:59:57Dim a
a = 1
MsgBox a = 1 Or 2 Or 3
これ、たしか最初は3になったはずだが、今は-1にしかならん。
おれの記憶違いかな?
それにしても
MsgBox 1 Or 2 Or 3 Or 4
これが7になるのはどうして?
007877
2009/10/05(月) 12:04:440079デフォルトの名無しさん
2009/10/05(月) 12:44:27>>38は人の程度が知れる
0080デフォルトの名無しさん
2009/10/05(月) 13:11:300081デフォルトの名無しさん
2009/10/05(月) 14:19:24とりあえず And、Or、Xor は論理演算子じゃなくてビット演算子だと覚えておけ
a が 1 じゃない時
a = 1 Or 2 Or 3 ⇒ False Or 1 Or 2 Or 3 ⇒ 00000000 Or 00000001 Or 00000010 Or 00000011 ⇒ 00000011 ⇒ 3
a が 1 の時
a = 1 Or 2 Or 3 ⇒ True Or 1 Or 2 Or 3 ⇒ 11111111 Or 00000001 Or 00000010 Or 00000011 ⇒ 11111111 ⇒ -1
1 Or 2 Or 3 Or 4 ⇒ 00000001 Or 00000010 Or 00000011 Or 00000100 ⇒ 00000111 ⇒ 7
0082デフォルトの名無しさん
2009/10/05(月) 16:16:05>>78書いた時点で分ってるよ。
0083デフォルトの名無しさん
2009/10/05(月) 16:39:52a が 1 じゃない時
×a = 1 Or 2 Or 3 ⇒ False Or 1 Or 2 Or 3 ⇒ 00000000 Or 00000001 Or 00000010 Or 00000011 ⇒ 00000011 ⇒ 3
○a = 1 Or 2 Or 3 ⇒ False Or 2 Or 3 ⇒ 00000000 Or 00000010 Or 00000011 ⇒ 00000011 ⇒ 3
a が 1 の時
×a = 1 Or 2 Or 3 ⇒ True Or 1 Or 2 Or 3 ⇒ 11111111 Or 00000001 Or 00000010 Or 00000011 ⇒ 11111111 ⇒ -1
○a = 1 Or 2 Or 3 ⇒ True Or 2 Or 3 ⇒ 11111111 Or 00000010 Or 00000011 ⇒ 11111111 ⇒ -1
=演算子はOr演算子よりも優先順位が高いのでa = 1が演算されたあとにOrの演算が行われる
0084デフォルトの名無しさん
2009/10/05(月) 17:23:56こまったことに2007のエクセルのヘルプには論理演算子と書いてあるんだがな
実際は論理演算も算術演算も区別がない。全部算術演算してる
問題の本質は、算術演算か論理演算かじゃなくて、型の優先順位の問題
Orで型が一致しない場合、booleanより他の型の方が優先順位が高い
おそらくこの式ならIntegerで値が帰っている
もしbooleanの方が優先順位が高ければ、2と3がbooleanに変換されるので
a = 1 Or 2 Or 3 ⇒ a = 1 Or True Or True ⇒ True
True=-1なので、常に-1が帰るはず
型がいい加減な言語の弊害だな
0085デフォルトの名無しさん
2009/10/05(月) 17:45:450086デフォルトの名無しさん
2009/10/05(月) 17:52:54一般論で言えばBoolean型の配列よりはビット演算の方がメモリが節約できてキャッシュの使用効率が上がるし
条件判断も高速になる。
可読性は落ちるけど昔からよく使われる手法だから、知ってないと人のソースが読めなかったりする。
0087デフォルトの名無しさん
2009/10/05(月) 19:49:260088デフォルトの名無しさん
2009/10/05(月) 20:24:160089デフォルトの名無しさん
2009/10/05(月) 20:31:150090デフォルトの名無しさん
2009/10/05(月) 20:31:50組込とかで機械語表記するときゃ今でも普通に使うよ
ハードに近づけば近づくほど限界性能を引き出せるけど分かりにくくなる
とりあえずVBAって時点で、変な表記はせずに可読性に特化したコードを書くべきだと思う
0091デフォルトの名無しさん
2009/10/05(月) 20:38:550092デフォルトの名無しさん
2009/10/05(月) 20:43:24手作業の自動化くらいに使ってりゃいいんだよ。自分でやるより早いだろ。
0093デフォルトの名無しさん
2009/10/05(月) 21:02:07ハード叩くときの設定なんかで使う
#ドライバー作る時なんかに必要なときがある(あまりいないと思うけど)
0094デフォルトの名無しさん
2009/10/05(月) 21:19:46VBAでビット演算を使って便利なケースを語れ
0095デフォルトの名無しさん
2009/10/05(月) 21:23:140096デフォルトの名無しさん
2009/10/05(月) 21:35:17フォームやシート上にcheckboxが多数ある場合のON/OFF判定とかは?
0097デフォルトの名無しさん
2009/10/06(火) 02:16:020098デフォルトの名無しさん
2009/10/06(火) 02:24:590099デフォルトの名無しさん
2009/10/06(火) 02:40:060100デフォルトの名無しさん
2009/10/06(火) 06:53:07If i Mod 2 = 1 Then
と
If i And 1 Then
偶数かどうかを比較したらビット演算が45%速かった。
If i Mod 2 = 0 Then
と
If i And 0 Then
0101100
2009/10/06(火) 06:58:230102デフォルトの名無しさん
2009/10/06(火) 07:11:08If j And 1 = 0 Then
0103デフォルトの名無しさん
2009/10/06(火) 07:34:470104デフォルトの名無しさん
2009/10/06(火) 07:50:32それも書こうと思ったが、たしかにその方が少し速いね。
0105デフォルトの名無しさん
2009/10/06(火) 07:51:330106デフォルトの名無しさん
2009/10/06(火) 07:54:490107デフォルトの名無しさん
2009/10/06(火) 07:56:120108デフォルトの名無しさん
2009/10/06(火) 08:02:23じゃねーな。最低だ。
0109デフォルトの名無しさん
2009/10/06(火) 08:15:34よく見る似たような最低なものにWorksheetFunction.IsNumberがある。
他にもあったな。
0110デフォルトの名無しさん
2009/10/06(火) 08:29:220111デフォルトの名無しさん
2009/10/06(火) 09:39:210112デフォルトの名無しさん
2009/10/06(火) 09:42:03奇数の判定はこれでいいんじゃないか?
If i Mod 2 Then
0113デフォルトの名無しさん
2009/10/06(火) 09:45:170114デフォルトの名無しさん
2009/10/06(火) 09:51:38普通はModだが、Andでビット演算で判定すればほんの少し速くなるって話だろ?
0115デフォルトの名無しさん
2009/10/06(火) 09:59:37お前の美しいソースを見てみたいもんだな。
0116デフォルトの名無しさん
2009/10/06(火) 10:07:27AAとして成り上がるため、スレを巡る旅をしています。
__
ヽ|__|ノ モォ
||‘‐‘||レ _)_, ―‐ 、
/(Y (ヽ_ /・ ヽ  ̄ヽ
∠_ゝ ` ^ヽ ノ.::::::__( ノヽ
_/ヽ /ヽ ̄ ̄/ヽ
0117デフォルトの名無しさん
2009/10/06(火) 10:27:45いやそうじゃなくて「= 1」という比較演算が無駄じゃないかって指摘。
このおかげで遅くなってる希ガス
If i Mod 2 = 1 Then
と比較するなら
If i And 1 = 1 Then
とするべきだろうし、
If i And 1 Then
に書き方を合わせるなら
If i Mod 2 Then
と比較しないと不公平じゃないかなーって思った。それだけ。
0118デフォルトの名無しさん
2009/10/06(火) 10:35:49たしかに公平にやるならそうだよな。
公平にやってもビット演算が少し速いみたいだけど、人に見せるコードならIf i Mod 2 = 1 Then だな。
0119デフォルトの名無しさん
2009/10/06(火) 12:31:350120デフォルトの名無しさん
2009/10/06(火) 19:37:140121デフォルトの名無しさん
2009/10/06(火) 19:50:090122デフォルトの名無しさん
2009/10/07(水) 02:02:48i Mod 2 = 1 ではマイナスの奇数が判定できない時点で失格
0123デフォルトの名無しさん
2009/10/07(水) 03:32:56たとえば4bitなら
-1 = 1111
-2 = 1110
-3 = 1101
0124デフォルトの名無しさん
2009/10/07(水) 07:11:14ー3 mod 2 = 1 になった?
0125デフォルトの名無しさん
2009/10/07(水) 07:24:010126デフォルトの名無しさん
2009/10/07(水) 08:52:58天然w
0127デフォルトの名無しさん
2009/10/07(水) 09:11:24すみませんねぇ、あいにくマイナス志向じゃないもんでね。
じゃぁIf i Mod 2 <> 0 Thenならあなたのおきにメスでしょうか?
0128デフォルトの名無しさん
2009/10/07(水) 09:27:470129デフォルトの名無しさん
2009/10/07(水) 09:50:25If i Mod 2 Then
なら負数でも問題ないんだが
0130デフォルトの名無しさん
2009/10/07(水) 10:48:04が偽になる環境って
ー(3 mod 2) = -1
と解釈されてるんだろ
((ー3) mod 2) = 1
と書けば問題無し
0131デフォルトの名無しさん
2009/10/07(水) 11:08:36天然w
0132デフォルトの名無しさん
2009/10/07(水) 11:17:12Roundは微妙に違うし。
0133デフォルトの名無しさん
2009/10/07(水) 11:24:05ない
数式を工夫したり、関数を自作する必要がある
またはWorksheetFunction.Round
0134デフォルトの名無しさん
2009/10/07(水) 11:26:43キミはまず、とりあえずマイナス記号を入力する方法から勉強しようか
0135デフォルトの名無しさん
2009/10/07(水) 11:27:200136デフォルトの名無しさん
2009/10/07(水) 13:37:07一応VBAにもRoundって関数がある
まあ、これ使うと思わぬ結果が出ることもある
自作するなら、基本的には0.5足して切り捨てなんだが
これもマイナスのときどうするか考えると結構じゃまくさい
0137デフォルトの名無しさん
2009/10/07(水) 14:13:010138デフォルトの名無しさん
2009/10/07(水) 15:44:12ちゃんと最初から読みなさい
質問者はVBAのRoundではだめなことがわかった上で、どうすればいいか質問してる
VBAのRound関数とワークシート関数のROUNDは機能が異なるのは既知
0139デフォルトの名無しさん
2009/10/07(水) 16:17:080140デフォルトの名無しさん
2009/10/07(水) 16:50:28を参考に、ExcelでSELECTを使えるようにしたのですが、うまくいきません。
データベースのテーブルの見出しを変更すると、きちんとした値を返しません。
デフォルトのIDとNAMEでは正常に値を取得できます。
具体的には、
Sheet2を以下のようにして、
| A | B
1 | ID | CATEGORY1
2 | 1 | a
3 | 2 | b
4 | 3 | c
Sheet1のA1に「3」を入れ、
A2に「=execsql("select CATEGORY1 from [Sheet2$] where ID = "&A1」と入力。
A2には値のエラーが返される。
どのあたりが問題でしょうか。
OS:WindowsXP
Excel ver:2003 (11.8307.8221)
0141デフォルトの名無しさん
2009/10/07(水) 17:15:52これを変更した?
0142デフォルトの名無しさん
2009/10/07(水) 17:19:59見落としていました。
ありがとうございます。
0143デフォルトの名無しさん
2009/10/07(水) 18:14:31バイト数を表示させることはできるのでしょうか。
教えてください、エロい人。
0144デフォルトの名無しさん
2009/10/07(水) 18:25:56無理
0145デフォルトの名無しさん
2009/10/07(水) 18:41:44すごく初歩的なことなんですが、
列が縦でrow、行が横でcolumですよね?
A5だとAが列で5が行ってことになりますよね?
A5セルからA10セルまでをループさせたいときに、
5や10の値の定数をrowみたいな名前で宣言してるのを見たんですが、
これってcolumじゃないんですか??
書籍なので間違いではなさそうなんですが・・・。
A列B列、C列・・・
5行、6行・・・
ですよね?
0146デフォルトの名無しさん
2009/10/07(水) 18:50:02辞書で調べてみ
0147デフォルトの名無しさん
2009/10/07(水) 19:12:00違うんじゃねーの?
5は捨てたり入れたりだもんな。
Round(1.5)もRound(2.5)も同じだろ?
0148デフォルトの名無しさん
2009/10/07(水) 19:29:34>>146の方の回答が全てだと思いますが、
下のExcel関数をいくつかのセルで試してみれば、理解しやすいかもしれません。
【関数】
=ROW() :この関数が入力されている行の行番号を調べます。
=COLUMN() :この関数が入力されている列の列番号を調べます。
0149デフォルトの名無しさん
2009/10/07(水) 19:31:05ループでバインドするなりキーイベントで捕捉するなり
フォームのTxtボックスとかなら普通に出来るけど、k
セル入力中ってどうだっけ
0150デフォルトの名無しさん
2009/10/07(水) 20:49:33正しい言い方が判らないので上手い事伝わるかどうか…なんですけど。
フォーム上にコマンドボタンを縦に5つ貼りつけています。
エンターキーを叩いた時、初期状態では一番上のボタンのマクロが実行され
ますが、これを3番目のボタンのマクロが実行される様に変えたいです。
テキストボックスとかだったらタブオーダーを設定すれば順番を指定できま
すけど、コマンドボタンについて同一フォーム上で最優先のものを指定する
事出来ますか?
0151デフォルトの名無しさん
2009/10/07(水) 20:51:48セルはテキストボックスか何かを継承してるはずなんで、
ハンドルさえ取得できればなんとかなる可能性はあるけど、
かなり大変じゃないかと思う。
それにバージョンごとに方法が違ってくると思う。
たぶんだけど2007が一番やりやすそうな気がする。
入力途中のキーイベントはVBAには存在しないので
自前でフックする必要がある。
0152デフォルトの名無しさん
2009/10/07(水) 20:54:47コマンドボタンにもタブオーダーはあるよ
0153デフォルトの名無しさん
2009/10/07(水) 20:58:42A1セルの場合
A=横=列=Column
1=縦=行=Row
0155デフォルトの名無しさん
2009/10/07(水) 23:40:36表示するプログラムで、サブルーチンプロシージャまたは関数プロシージャを3つ利用しなくてはなりません。
ひたすらサイトを検索したのですが、見つかりませんでした。
全く手が出せず、困っています。どなたか教えてください。よろしくお願いします。
0156デフォルトの名無しさん
2009/10/08(木) 00:06:09Excel2007を使用しています。
0157デフォルトの名無しさん
2009/10/08(木) 00:28:45検索すると結構、マクロ、祝日関数あるよね
ダウンロードしてそのソースをみて
考えればいんじゃない
解説してるサイトもあった気がする
0158デフォルトの名無しさん
2009/10/08(木) 00:32:56祝日判定や、日にちを入れて表示させるものは
見つかったのですが、祝日名を表示させるものは
ひとつしか見つからず、ダウンロードしても
マクロは見られませんでした…
0159デフォルトの名無しさん
2009/10/08(木) 00:38:20祝日名を表示させるコードの一例が載っています。
ttp://www.h3.dion.ne.jp/~sakatsu/holiday_logic.htm#VBA
0160デフォルトの名無しさん
2009/10/08(木) 00:45:27kt関数は使ったことがなく、わかりませんでした…。
0161デフォルトの名無しさん
2009/10/08(木) 01:36:09質問の意図がちょっとわからんな。
そういう関数を作れっていう宿題なのか、どこかから手に入れたマクロの使い方を知りたいのか。
ちなみにkt関数は肝心の部分がプロテクトかかってて見えないんじゃなかったっけ?
0162デフォルトの名無しさん
2009/10/08(木) 13:09:35ttp://www.matsumae.hokkaido-c.ed.jp/02school/kyouka_01.pdf
このサイトにある例13の問題の、
ex13 上の例13のプログラムを参考にして,自然数Nを入力したとき,
Nの約数の個数を求めるプログラムを,次の手順で作れ。
変数sを準備し,N以下の自然数で割り切れたとき,sに1を加える。
これのやり方が全くわかりません。
どなたか簡単に教えてくれないでしょうか。
0163デフォルトの名無しさん
2009/10/08(木) 13:45:39宿題スレにいけ。ぼけ。
Sub test()
Dim inputNum As Integer
Dim count As Integer
Dim divNums As Integer
inputNum = InputBox("整数入力してね")
For count = 1 To inputNum
If inputNum Mod count = 0 Then
divNums = divNums + 1
End If
Next
Debug.Print divNums
End Sub
ちなみにサンプル例が間違えてるからなw
松前高等学校のプログラム担当の先生に言っといて。
0164デフォルトの名無しさん
2009/10/08(木) 14:11:18ありがとうございます。
0165デフォルトの名無しさん
2009/10/08(木) 15:16:46http://pc12.2ch.net/test/read.cgi/tech/1200989025/115-
0166デフォルトの名無しさん
2009/10/08(木) 16:01:04入力したキーのフックに使えるAPI関数があるにはある
SetWindowsHookEx
恒常ループを設定して
多分出来ないんだろうが
0167デフォルトの名無しさん
2009/10/08(木) 16:13:28何しに出てきたんだwww
0168デフォルトの名無しさん
2009/10/08(木) 17:13:36キー入力のバインドは出来るんだろうが、他のセルに書きながら元セルのアクティブどうするかとか、全角や変換どうするんだとか考えたら難しいかなあと
キー入力関係なく、一定時間ごとにセル内容を参照してってのも、入力を確定してないから無理だろうし
セル入力中のデータを捕捉出来れば或いは
0169デフォルトの名無しさん
2009/10/08(木) 18:17:21学校で授業でやっていて、「テストまでには出来るようにしておけ」
といわれています。
サブルーチンもまだ1度しか使ったことがなく、
マクロを見て理解するのが精一杯の状態です。
0170デフォルトの名無しさん
2009/10/08(木) 18:39:53休日と振替は法律で決まってるからアルゴリズムまるぱく出来るが、最近は数年で法律改正されてる
0171デフォルトの名無しさん
2009/10/08(木) 19:36:09http://info.2ch.net/before.html
0172デフォルトの名無しさん
2009/10/08(木) 19:40:370173デフォルトの名無しさん
2009/10/08(木) 19:49:36ttp://terrapy.sakura.ne.jp/image/3DStackedColumn.gif
0174デフォルトの名無しさん
2009/10/08(木) 20:14:32カレンダー関連の処理は簡単に見えて実はかなり難しい。
はっきり言って初心者には無理。
> プロシージャを3つ利用しなくてはなりません。
てのがひっかかるんだけど、
学校が用意したサブルーチンがあって、それを呼び出せって話じゃないの?
0175デフォルトの名無しさん
2009/10/08(木) 23:37:560176デフォルトの名無しさん
2009/10/08(木) 23:46:19自分も初心者には少し荷が重い気がするけど
一度に全てやろうとするよりも
一つずつ片付けた方が良いとおもうよ
祝日に関しては内閣府ページ
http://www8.cao.go.jp/chosei/shukujitsu/gaiyou.html
が参考になると思うんで
どのような処理が必要かまず検討してみたら?
テーブルに1年分(1/1〜12/31)のデータ作成して
それに祝日データを入れていく方法が一番分かり易いんじゃないかな
振替休日の判定とか
休日 平日 休日 → 休日 休日 休日 とする処理とかあるし
0177デフォルトの名無しさん
2009/10/09(金) 00:07:41→1月第二月曜の日を求める→出力「成人の日 1月○日 月曜日」
…の繰り返しをする、ということしか…
さまざまなサイトに出ている「春分秋分」については、月日は「春分日」「秋分日」、
曜日は「未定」と表示すればよいのですが…
0178デフォルトの名無しさん
2009/10/09(金) 00:23:560179デフォルトの名無しさん
2009/10/09(金) 00:26:24ワークシートか配列に50年分の一覧表を入れておいて、それを表示するだけの方がよっぽどコンパクトで正確。
0180デフォルトの名無しさん
2009/10/09(金) 00:36:00第二月曜日など動く祝日
祝日と祝日の間、振替休日
の三つに別けてやるのがこの宿題の正解だな
0181デフォルトの名無しさん
2009/10/09(金) 00:37:28成人の日 1月の第2月曜日
建国記念の日 2月11日
春分の日 春分日
昭和の日 4月29日
憲法記念日 5月3日
みどりの日 5月4日
こどもの日 5月5日
海の日 7月の第3月曜日
敬老の日 9月の第3月曜日
秋分の日 秋分日
体育の日 10月の第2月曜日
文化の日 11月3日
勤労感謝の日 11月23日
天皇誕生日 12月23日
について表示できれば良く、改定については考慮しません。
0182デフォルトの名無しさん
2009/10/09(金) 00:39:570183デフォルトの名無しさん
2009/10/09(金) 01:13:42ならば、日付が決まっている祝日
第二月曜日、第三月曜の祝日
秋分春分の三つに分けるのが正解かな
0184デフォルトの名無しさん
2009/10/09(金) 01:50:01後出し過ぎ
0185デフォルトの名無しさん
2009/10/09(金) 02:38:240186デフォルトの名無しさん
2009/10/09(金) 08:24:300187デフォルトの名無しさん
2009/10/09(金) 08:52:500188デフォルトの名無しさん
2009/10/09(金) 21:28:17Windows2000
Excel2000
です。
シート1に
名前 日付 数 名前 日付 数 ・・・
A氏 10/1 12 E氏 10/3 10
B氏 10/1 11 F氏 10/2 10
C氏 10/2 10 G氏 10/4 11
D氏 10/3 10
のような感じでデータが横に長く入力されているのですが、
これをシート2に一括のデータとしてまとめたいです。
名前には重複はありません。日付のみ重複しています。
申し訳ありませんが、よろしくお願いします。
0189デフォルトの名無しさん
2009/10/09(金) 21:30:51シート2は
名前 日付 数
A氏 10/1 12
B氏 10/1 11
C氏 10/2 10
D氏 10/3 10
E氏 10/3 10
F氏 10/2 10
G氏 10/4 11
・
・
・
の形にしたいです。
0190デフォルトの名無しさん
2009/10/09(金) 21:41:35配列に入れたら簡単だよ。
それくらい人に頼らず自分で作れないとダメでしょ。
0191デフォルトの名無しさん
2009/10/09(金) 21:52:53名前には重複がないんだったら
そのままシート2へコピーすればいいだけてしょ
1)A氏〜D氏までのセルをコピー
2)その下にE氏〜G氏までのセルをコピー
てな感じで ループ処理していけば
0192デフォルトの名無しさん
2009/10/09(金) 22:07:04もうちょっと具体的に。
シート1は縦4列?
0193デフォルトの名無しさん
2009/10/09(金) 22:11:290194188
2009/10/09(金) 22:28:11今までは手作業でコピーと貼り付けをしていたのですが
数が膨大になってきたので手作業ではまかなえなくなってしまいました。
とりあえず自分でマクロを組んでみたのですが、ブロックごとの数がまちまちで
シート2の一括データに空白が出来て穴あきデータになっていしまいます・・・
0195デフォルトの名無しさん
2009/10/09(金) 22:41:20希望に沿うか分からないですけど、作ってみました。
ttp://excelerthanexcel.blog103.fc2.com/blog-entry-1.html
3つのプロシージャをどう作るかを下の2択で迷い、後者にしました。
・ 祝日の性質別(固定日、第n月曜日、秋分春分)
・ 機能別(日付確定、曜日確定、1行出力)
よかったら参考にしてください。
0196デフォルトの名無しさん
2009/10/09(金) 22:57:49デキタヨー
Sub a()
Set S1 = Sheets("シート1")
Set S2 = Sheets("シート2")
With S1
R_max = .UsedRange.Rows.Count
C_max = .UsedRange.Columns.Count
R_dest = 2
For c = 1 To C_max Step 3
For r = 2 To R_max
If .Cells(r, c) <> "" Then
S2.Cells(R_dest, 1) = .Cells(r, c)
S2.Cells(R_dest, 2) = .Cells(r, c + 1)
S2.Cells(R_dest, 3) = .Cells(r, c + 2)
R_dest = R_dest + 1
End If
Next
Next
End With
End Sub
0197デフォルトの名無しさん
2009/10/09(金) 23:08:29何でわざわざSetするの?
0198デフォルトの名無しさん
2009/10/09(金) 23:11:46本当にありがとうございます。助かります。
イミディエイトウインドウが表示されないです…
「春分秋分」については、月日は「春分日」「秋分日」、 曜日は「未定」
と表示すればよいのですが、その場合はどうすればよいか
教えていただきたいです。
0199デフォルトの名無しさん
2009/10/09(金) 23:14:500200デフォルトの名無しさん
2009/10/09(金) 23:28:12イミディエイトウィンドウは表示されました。すみません。
0201デフォルトの名無しさん
2009/10/09(金) 23:29:33あとから修正する可能性のある部分を先頭にまとめてるだけだよ
0202デフォルトの名無しさん
2009/10/09(金) 23:38:16>学校で授業でやっていて、「テストまでには出来るようにしておけ」
じゃなかった?
あんまり人まかせだと テストで 赤点てな事になるよ!
0203195
2009/10/10(土) 00:03:23自己解決したとはいえ、イミディエイトウィンドウぐらいは質問せずに自分で開きましょう。
ブログ内のコードをぐだぐだに編集して、結果だけは希望通りに出るようにしました。
質を下げたもので良ければ利用してください。
プログラム板にしては非常にぬるま湯的な対応をしてしまったことを
すごく後悔しています。でもまぁ、自分自身の勉強にはなったか。
0204デフォルトの名無しさん
2009/10/10(土) 00:17:17ちゃんと内容は見ていないがSet □ = Nothing をする癖をつけた方がいいと思うよ。
0205デフォルトの名無しさん
2009/10/10(土) 00:51:40ありがとうございました。
0206デフォルトの名無しさん
2009/10/10(土) 01:10:37ローカル変数って、たとえオブジェクト型でもモジュールの出口で自動的に開放されるんじゃないの?
0207デフォルトの名無しさん
2009/10/10(土) 03:57:400208デフォルトの名無しさん
2009/10/10(土) 04:17:300209デフォルトの名無しさん
2009/10/10(土) 05:39:19いらないよ。
>>207
何の礼儀だよ?
>>208
だから?
0210デフォルトの名無しさん
2009/10/10(土) 06:03:580211デフォルトの名無しさん
2009/10/10(土) 07:23:400212デフォルトの名無しさん
2009/10/10(土) 10:05:40/(゚)丶_ 丶
/ (● (゚)|つ
| (入_ノ ミ
| (_/ ノ
\___ノ゙ー-、
/\ _ \
(⌒O /\ (_ノ
\ノ / 、 )0
0214デフォルトの名無しさん
2009/10/10(土) 10:51:27羮に懲りて膾を吹く。
アプリ終了前にfreeしまくるがごとし。
0215デフォルトの名無しさん
2009/10/10(土) 12:23:40>>196を擁護すればSetした方が速いんだよ。
まぁCellsは遅いから、速くしたければ配列だろうけどね。
それからわざわざシート参照の変数をSet 変数 = Nothingとする必要はねーよ。
そんなこと気にするやつは、他にもっと気にすべきことが抜けてる場合がほとんどだ。
0216デフォルトの名無しさん
2009/10/10(土) 12:55:55>S2.Cells(R_dest, 1) = .Cells(r, c)
>S2.Cells(R_dest, 2) = .Cells(r, c + 1)
>S2.Cells(R_dest, 3) = .Cells(r, c + 2)
この部分は
S2.Cells(R_dest, 1).Resize(,3).Value= .Cells(r, c).Resize(,3).Value
と1行で書けそうだな。
0217デフォルトの名無しさん
2009/10/10(土) 13:10:30メモリが少ないようなマシンで
set=nothingしないとその後辛くないかな
何もないなら必要ないだろうけど。
試して言っている訳ではないです。
0218デフォルトの名無しさん
2009/10/10(土) 16:16:350219デフォルトの名無しさん
2009/10/10(土) 19:06:03Worksheet型のオブジェクト変数はシートを作ってるわけじゃない。
ワークシートへの参照への参照だ。
メモリは32ビットCPUで4バイトだ。
マクロが終了すりゃちゃんと参照カウンタは0になる。
Set ** = Nothingを書くのを否定はしないが、書くのがあたりまえって意見は否定する。
0220デフォルトの名無しさん
2009/10/10(土) 20:02:130221デフォルトの名無しさん
2009/10/10(土) 21:15:430222デフォルトの名無しさん
2009/10/10(土) 21:18:02礼儀と呼ばれるんだろね
質問なんですが
他に礼儀ってどんなものが有りますか?
0223デフォルトの名無しさん
2009/10/10(土) 21:19:16如何に記述量を増やすかがプロなんだよ。
最小限で簡潔になんてアマチュアのやること。
0224デフォルトの名無しさん
2009/10/10(土) 21:22:390225デフォルトの名無しさん
2009/10/10(土) 21:26:090226デフォルトの名無しさん
2009/10/10(土) 21:27:510227デフォルトの名無しさん
2009/10/10(土) 21:36:46エクスキューズが「礼儀」ってことだ。
0228デフォルトの名無しさん
2009/10/10(土) 21:45:54普通はSetした方が速いが>>196は未宣言のVariant型だから速くはならんね。
Nothing云々より変数宣言が大事だな。
0229デフォルトの名無しさん
2009/10/10(土) 21:57:250230デフォルトの名無しさん
2009/10/10(土) 21:57:500231デフォルトの名無しさん
2009/10/10(土) 21:59:54関数抜けたら解放されるんじゃ?
0232デフォルトの名無しさん
2009/10/10(土) 22:02:12普通なら宣言しないほうが早い
でも場合によってはエラーが引き起こされたりメモリが足りなくなったりする
エラー処理するかどうかなんて人それぞれだし、押し付けるようなもんじゃないんじゃないん
0233デフォルトの名無しさん
2009/10/10(土) 22:16:56シート上にボタンを2つ貼りつけています。
動作はブックのコピー先をどこにするかだけの違いだけです。
そこでボタンは2つで同じマクロを呼び出し、どのボタンから呼ばれたか
によって動作を変えたいのですが、そういう事出来ますか?
フォーム上のボタンであれば、
Private Sub btn_A_Click()
CopyExec A
End Sub
Private Sub btn_B_Click()
CopyExec B
End Sub
みたいにそれぞれパラメータを与えて切り替えというのが出来ると思うのですが
0234デフォルトの名無しさん
2009/10/10(土) 22:33:540235デフォルトの名無しさん
2009/10/10(土) 22:39:35貼りつけているのは、CommandButtonなの?
Private Sub CommandButton1_Click()
End Sub
Private Sub CommandButton2_Click()
End Sub
てのが出来るどこれとは違うのかな?
0236デフォルトの名無しさん
2009/10/10(土) 22:49:170237デフォルトの名無しさん
2009/10/10(土) 22:50:35速度とかIndexとかVlookupとかピボットとかNothingとか全部ネタのクセに
わかってるからさ!
0238235
2009/10/10(土) 22:53:23ただ
>フォーム上のボタンであれば、
以下の文面では
フォーム上でも同じマクロを呼び出してないけど
それはいいの?
0239233
2009/10/10(土) 22:55:20そうです。CommandButtonです。
それはフォームについてVBEで書く時ではないですか?
シート上に貼りつけて、対象マクロを選択する時ってマクロの登録(N)から
マクロを選択するけど同じのを選択した時に、どのように区別がつけられるのか?
と思いまして質問しています。どうなんでしょうか。
0240デフォルトの名無しさん
2009/10/10(土) 22:56:50あれは CopyExec というマクロに対して、パラメータとして AまたはBを与えるという意味で
書きました。判りにくくてすいません。
0241デフォルトの名無しさん
2009/10/10(土) 23:01:50Excel2007じゃないんでなんとも言えないけれど
対象ボタンを右くりっくして
"コードの表示"をすると
シートオブジェクトのコード画面に
Private Sub CommandButton1_Click()
End Sub
とかできない?
0242239
2009/10/10(土) 23:08:48ボタンを右クリックして出てくるメニューの一覧が
切り取り
コピー
貼りつけ
------
テキストの編集
------
グループ化
順序
------
マクロの登録
コントロールの書式設定
でコードの標示というのはここからは出来ないみたいですが
0244デフォルトの名無しさん
2009/10/10(土) 23:41:15VBE開いてボタン貼り付けたシートのコードの表示すればいい
0245デフォルトの名無しさん
2009/10/10(土) 23:49:31デザインモードにしてボタンをダブルクリックでVBEの画面になる。
0246デフォルトの名無しさん
2009/10/11(日) 00:36:01アドインタブのユーザー 設定のツールバーのところにボタン1、ボタン2を作って、
ボタン1を押したら、ボタン1のEnabledをFalse、2をTrue
ボタン2を押したら1はTrue、2はFalseに設定したはずですが、
ボタン1を押したあと、ボタン2が押せる状態になっていません。タブを切り替えるとなぜかうまくいくんですが。
2007はこういう仕様なんでしょうか
0247デフォルトの名無しさん
2009/10/11(日) 00:43:510248デフォルトの名無しさん
2009/10/11(日) 00:54:360249デフォルトの名無しさん
2009/10/11(日) 00:59:03同じマクロを呼び出した場合、呼び出し元の区別はつかんだろうな
パラメータが指定できるなら そこで区別つけるしかない
あと
フォーム上でもシート上でも
クリックイベントのプロシージャは利用できる
0251デフォルトの名無しさん
2009/10/11(日) 07:38:14application.callerでボタンのテキストが取得できるから、それで判断。
0252デフォルトの名無しさん
2009/10/11(日) 08:04:41MsgBox "呼出し元 " & Application.Caller
でシート上のボタンでも呼出し元を判別する事が出来ました。ありがとう!
0253デフォルトの名無しさん
2009/10/11(日) 10:45:19フォームのボタンに限らず、イベントの発火元は大抵わかるようになってるんだよ。
まぁ、中にはわからにものや、任意のマクロ(イベントハンドラ)を登録できないのもあるけどね。
0254デフォルトの名無しさん
2009/10/11(日) 11:46:13MacroA pram:=1
End Sub
Private Sub CommandButton2_Click()
MacroA pram:=2
End Sub
こういうのは駄目?
0255デフォルトの名無しさん
2009/10/11(日) 12:08:38プログラマ的な説明だと、イベントハンドラ内に直接処理を実装すると、凝集度が低くなるから。
0256デフォルトの名無しさん
2009/10/11(日) 17:21:22臨床検査学以外で初めて聞いたよ。
まさか一般社会で聞く単語とは思ってもいなかった。
0257デフォルトの名無しさん
2009/10/11(日) 18:01:09Cellsの使い方について
このスレでも時々みかけるんですが
a = Sheets("Sheet1").Cells(1,1).Value
と
a = Sheets("Sheet1").Cells(1,1)
は結果的に両方共 A1セルの内容を変数aに代入している事になっているのだけど
前者と後者の違いってあるのですか?
本来は、前者であるべきとは思いますが
後者を使った時の弊害ってなにかあります?
0258デフォルトの名無しさん
2009/10/11(日) 18:22:07人によってはデフォルトプロパティを中途半端に省略したソースを汚いと感じることもある。
自分一人で使うだけなら好きにすればいい。
あとは、タイピング量が数回増えるのも人によっては弊害と考えるかもしれない。
0259257
2009/10/11(日) 18:37:12結局の所どちらでも結果は一緒なんだから
どちらを使ってもいいんですね
ソースが綺麗か汚いかはその人の主観なんだから
あまり気にしません
とは言え 自分自身のソースみて汚いと感じる事があるんで
精進しなくては
ありがとうございます
0260デフォルトの名無しさん
2009/10/11(日) 20:48:330261デフォルトの名無しさん
2009/10/11(日) 23:13:40また荒れる原因になるかもしれないんだけど、
やっぱりデフォルトプロパティは省略すべきじゃないと思うよ。
range型に代入する時なんか、可読性云々じゃなくて、
後から見て訳が分からなくなる・・・時がある。
0262デフォルトの名無しさん
2009/10/11(日) 23:36:28で、覚えたら好きに書けばいいと思う。
覚えていれば省略しても、普通にも書けるが、覚えてないと普通には書けないと思うよ。
0263デフォルトの名無しさん
2009/10/11(日) 23:59:39原則的に省略しないほうがいいと俺も思うけど、場面場面で使い分けるべきではある
0264デフォルトの名無しさん
2009/10/12(月) 00:00:30デフォルトプロパティは省略しない方がいいんじゃないだろうかと言ってみる
それならとばかりにWithステートメントを多用すると、
C#で「面倒臭ぇと」ボヤく事になる罠
0265デフォルトの名無しさん
2009/10/12(月) 00:09:210266デフォルトの名無しさん
2009/10/12(月) 00:13:01それと同じで曖昧な表現は極力明確にするほうが良いと思う
どこまでが曖昧な表現かは人によるw
0267257
2009/10/12(月) 01:14:57みなさんありがとうこざいます
やはり省略しない方がよさそうですね
確かに単純なプログラムでは問題なくても
複雑なプログラムになるほど後で見て訳分からなくなりそうですもんね
でも
Itemプロパティぐらいは省略してもいいかなと思ってます(^^
0268デフォルトの名無しさん
2009/10/12(月) 06:01:17Itemまで書くとくどいよな。
Worksheets.Item("Sheet1")とかCells.Item(1,1)とかする奴はあまりいないな。
0269デフォルトの名無しさん
2009/10/12(月) 22:20:08///)
/,.=゙''"/
/ i f ,.r='"-‐'つ____ こまけぇこたぁいいんだよ!!
/ / _,.-‐'~/⌒ ⌒\
/ ,i ,二ニ⊃( ●). (●)\
/ ノ il゙フ::::::⌒(__人__)⌒::::: \
,イ「ト、 ,!,!| |r┬-| |
/ iトヾヽ_/ィ"\ `ー'´ /
0270デフォルトの名無しさん
2009/10/13(火) 16:41:04B1B2・・・にグーグルかヤフーのその単語の検索件数を書き入れていくというような
Webクエリは作れないものでしょうか?
0271デフォルトの名無しさん
2009/10/13(火) 18:09:44そのままでは件数がクエリで取り出せないので、VBAと組み合わせる必要がある
0272デフォルトの名無しさん
2009/10/13(火) 18:18:16ぜひ御教授お願いします。数万の単語の検索に途方にくれています>__<
0273デフォルトの名無しさん
2009/10/13(火) 19:14:300274デフォルトの名無しさん
2009/10/13(火) 19:26:291つのセルに1つの文字列が入っています。
各行はその文字列の集合とします。
その文字が何文字あるのかと、
各行の文字の全組み合わせ(各行の全部分集合)が全体の中で何個あるのか、
その結果を出力したいのですがどうしたらいいでしょうか?
例えば、
A,B,C,D
A,B
A,B,C
A
このように各セルに文字が入っていたとすると、
全体の中でAは4個、Bは3個、Cは2個、Dは1個あります。
また、組み合わせの個数は全体の中でそれぞれ、
(A,B)は3個、(A,C)は2個、(A,D)は1個
(B,C)は2個、(B,D)は1個
(C,D)は1個
(A,B,C)は2個、(A,B,D)は1個、(A,C,D)は1個
(B,C,D)は1個
(A,B,C,D)は1個となります。
これは具体的な例ですが、実際は何行何列でも何文字でも対応できるように一般化したいです。
意外と難しくてどうしたらいいかわかりませんでした。
こうすればできるだろうという方針だけでもどなたかご教授お願いします。
0275デフォルトの名無しさん
2009/10/13(火) 21:11:13Instrで文字列内を検索すりゃ良いんでない?
てか、どんだけの文字数があるのかさっぱりわからん。
無数にある文字種類から検索するとなったら酷い事になりそうだ。
使われてる文字の一覧を作って、それを検索して行くのが良いかもな。
文字種類は無限です。って言うなら、俺は降りる。
0276デフォルトの名無しさん
2009/10/13(火) 21:53:11わかりにくい説明で本当すいません。
「A,B,C,D」は1つの文字列ではありません。1つのセルに1つの文字が入っています。
コンマの区切りでセルを表したつもりでした。
「A,B,C,D」の、AはRange("A1")、BはRange("B1")、CはRange("C1")、DはRange("D1")
とに入っています。
実際はAとかBでなく、りんごとかバナナみたいな1つの単語が1つのセルに入ることになりますが。
(A,C)は(りんご、バナナ)という組み合わせだと考えていただけたらわかりやすいかと思います。
使われる単語は無限ではありません。
それでも仰るとおり数が増えれば酷いことにはなりますが、
そこはまた別問題で解決する算段はあります。
(りんご、バナナ)という組み合わせが全体に何個あるか?という話なんです。
わかりにくい説明ですいませんが。
VBAで、ある集合の部分集合を全て列挙するやり方だけでもどなたか
ご教示してくださいませんか?
一応自分でも調べてみましたがわかりませんでした。
0277デフォルトの名無しさん
2009/10/13(火) 22:05:47ヒント モリケン
0278デフォルトの名無しさん
2009/10/13(火) 22:12:31275氏も書いてるがInStrでOK。
にしても説明ヘタだな、君は。
0279デフォルトの名無しさん
2009/10/13(火) 22:29:15他人には(特に掲示板なんかでは)質問者のレベル・環境、そして何をどうしたいのかなんて判らないのだから。
(ここはExcel VBAスレだから或る程度は限定されてるけど)
0280デフォルトの名無しさん
2009/10/13(火) 22:33:33すいませんがんばってみます。
サンプルでもうpすればわかりやすかったかも・
0281デフォルトの名無しさん
2009/10/13(火) 23:35:10この場合は4文字だから、組み合わせは
4C4=1
4C3=4
4C2=6
の11種類しかない。
組み合わせの形がわかるから、その組み合わせを順に行毎にループすりゃいい。
0282デフォルトの名無しさん
2009/10/14(水) 10:28:23VBAはかなりいろいろできるようになったのですが、ネットにつなぐスクリプトは
挑んだことがありません。またどうやってヤフーやゴーグルのデータを取り込んで
加工するかがわかりません。
一単語ごとに検索して検索数をコピペする作業は300ぐらいこなすとぐったりです。
どうすれば自動化したいのです・・・
0283デフォルトの名無しさん
2009/10/14(水) 11:04:49>1 ★5
0284283
2009/10/14(水) 11:06:50だった;;
0285デフォルトの名無しさん
2009/10/14(水) 11:09:03ただし、こっからが問題ありでヤフーやらぐーぐる(だろ?w)が仕様変更でレイアウトなどを変更したら、それに合わせて
修正必須になる
0286デフォルトの名無しさん
2009/10/14(水) 11:13:47とりあえずヒントだけ。(環境依存な部分があるので、このままじゃ動かない)
Sub 件数取得()
kw = "ぬるぽ ガッ"
Set ObjHttp = CreateObject("Microsoft.XMLHTTP")
ObjHttp.Open "GET", "http://www.google.co.jp/search?hl=ja&q=" & kw, False
ObjHttp.Send
src = StrConv(ObjHttp.responseBody, vbUnicode)
Set ObjHttp = Nothing
src = Mid(src, InStr(InStr(src, "id=resultStats") + 24, src, "<b>") + 3)
src = Left(src, InStr(src, "</b>") - 1)
Debug.Print "「"; kw; "」のヒット件数="; src
End Sub
0287デフォルトの名無しさん
2009/10/14(水) 12:34:58複数のセルをcsv形式で文字列変数に格納したいのですが、
Webで探したら1セル+","を繰り返す方法しか見つかりません
でした。
実際試して見ましたが対象セルが数万あるので処理に非常
に時間が掛かっております。
Joinなどを利用して一括で行うなど、高速化の手段は無い
のでしょうか?
(対象セルは矩形で表現できます)
ちなみに最終目的は複数のBookのある範囲のセル値を1つ
のcsvファイルにまとめることです。
よろしくお願いします。
0288デフォルトの名無しさん
2009/10/14(水) 12:41:09あくまでも想像だけど、時間がかかっているのは、たぶんセルの内容を1つずつ読み出してるから。
配列に一気に読み込んでから処理すれば、もっと速くなるはず。
0289デフォルトの名無しさん
2009/10/14(水) 13:01:44Join関数は一次元配列しか指定できないから、二次元から一次元への変換部分だけは
自分で工夫して作るしかない。
0290デフォルトの名無しさん
2009/10/14(水) 13:11:04違うと思うよ。
単純に連結すりゃだんだんサイズが大きくなってメモリに入りきれなくなり別のメモリ領域をしょっちゅう探して確保しなきゃならないから時間がかかるんだ。
昔は必要なサイズの文字列を用意しておいてMidステートメント(関数じゃない)ではめ込んでいくのが常道だったが、今はJoin関数があるから楽だな。
0291デフォルトの名無しさん
2009/10/14(水) 14:21:33神様ありがとうございます。
どういうふうな勉強をされたのでしょうか。ネットワーク関係のお仕事など
されているのでしょうか。参考になる本などを教えていただけるとうれしいです☆
ありがとうございます。
0292287
2009/10/14(水) 14:26:52一次元に変換してJoinでやってみます。
0293287
2009/10/14(水) 15:53:51追加で質問させてください。
先の件は一次元にしたら体感で数十倍以上早くなりました。
ありがとうございました。
文字列変数に格納したデータをcsv形式で保存すると、期待した
結果が""で囲われたcsvファイルが出来上がりました。
(以下サンプル)
"1,2,3,4,5,
1,2,3,4,5,
"
この先頭/末尾の「"」を入れたくないのですがどうすれば良い
のでしょうか?
0294287
2009/10/14(水) 16:26:40出力をWriteで行っておりましたがPrintに変えたら希望通りとなりました。
違いがよっく分かりませんが解決しましたのでご報告します。
ありがとうございました。
0295デフォルトの名無しさん
2009/10/14(水) 16:27:54csv形式で保存するんじゃなくて、テキストファイルに出力する
0296デフォルトの名無しさん
2009/10/14(水) 17:05:17googleで検索などしたところ
Dim aaa() as string
など()のみで宣言したアトに
ReDim aaa(0 to 10)
のように範囲を指定して使う。みたいな例しか検索できませんでした
しかし、範囲を指定して使うならそれはすでに動的ではなく静的じゃないか
とずっと頭を抱えているのですが
要素数不明の配列を扱うことは無理なのでしょうか?
配列にデータを入れる際に、データ数カウントしながら入れて
その後ReDimすりゃいいってことですかね??
0297デフォルトの名無しさん
2009/10/14(水) 17:10:03入れる前に範囲決めろとか無茶なんですが・・・そういうのはvbaじゃ無理ですかね?
0298デフォルトの名無しさん
2009/10/14(水) 17:17:59あとから何度でもサイズを変更できるというのも一種の動的。
>>297
インデックス値を変数に入れておき、データを入れる前に、そのインデックス値を使って
配列をどんどん拡張していけばいい。
ただしReDimを使うと配列の中身がクリアされてしまうので
データを保持したままサイズを変更するにはReDim Preserveを使う必要がある。
VBAでは一般的なテクニック。
0299デフォルトの名無しさん
2009/10/14(水) 17:20:39繰り返し処理をしていたら400ほどでデータがなくなりました。
ブラウザでグーグルを見ると、あなたは拒絶しますのような画面が出てグーグル
使えなくなりました・・・
どうすれば・・・・・
0300デフォルトの名無しさん
2009/10/14(水) 17:23:170301デフォルトの名無しさん
2009/10/14(水) 17:25:33しばらく待つ
0302デフォルトの名無しさん
2009/10/14(水) 17:29:09そのサンプルはOpenでコネクションが開きっぱなしだから、まずは1回ごとにCloseしてみ
あとは、まあ連続アクセスは避けるとか。たとえば10秒間隔でアクセスするよう修正してみる
0303デフォルトの名無しさん
2009/10/14(水) 17:46:57をしてはいけないということです・・・
世界のグーグルを怒らせてしまって・・・
0304デフォルトの名無しさん
2009/10/14(水) 18:10:25... but your computer or network may be sending automated queries.
To protect our users, we can't process your request right now.
See Google Help for more information.
0305デフォルトの名無しさん
2009/10/14(水) 18:48:06アドバイスありがとうございます
要素数をuboundで数えて、残り少なくなったら配列を拡張するという方法をとってみました
とりあえずはこれでなんとかなりそうです
0306デフォルトの名無しさん
2009/10/14(水) 23:45:51そんなファジーな使い方をw
かっちりと要素数取得すれば良いんじゃないか?
0307デフォルトの名無しさん
2009/10/15(木) 00:12:46別に質問でも回答でもないんだけど・・・
グーグルをそういう使い方したらいけないというのがわかって為になったわ
0308デフォルトの名無しさん
2009/10/15(木) 03:17:58http://kabutomo.net/img.php?filename=dc_740000_1_1255544121.png
0309デフォルトの名無しさん
2009/10/15(木) 08:30:17復旧しました。復旧にはゆがんだ画像の絵のなかの文字を入力
させる画面が二回出てきて、復旧。その後、何回かグーグルを
普通に利用したところ、またゆがんだ絵の文字を入れろと・・・
すっかりブラックリストに載ってしまったみたいです・・・・・
英語グーグルにアクセスしても同じことで、違うのは、
送信ボタンが、I'm human と書いてあるところでした・・・
かなりこわい経験でした。400か500連続で、ストップというところ
でしょうか。気をつけてください。
それにしてもあなたはグーグルとのこの契約を知っているでしょう
とは・・・・
0310デフォルトの名無しさん
2009/10/15(木) 08:59:36ばいばいおさるさんw
0311デフォルトの名無しさん
2009/10/15(木) 11:06:57ここから先はネットサービス板あたりの領域かな。
Googleの検索は1時間あたり何回までが限界とかそういうのをきちんと調査した上で、
それを越えないようなプログラムを工夫して作ることになる。
0312デフォルトの名無しさん
2009/10/15(木) 11:30:00なんか世界から拒絶されたような・・・
手で作業するよりも早ければそれでいいです。一分に5つぐらいのペースのを
つくってみます。一月ほど休むことにします。
プログラマー向けのページには一日5000までとは書いてあったのですが・・・
ヤフーは5万までみたいです。
0313デフォルトの名無しさん
2009/10/15(木) 12:03:540314デフォルトの名無しさん
2009/10/15(木) 12:11:350315デフォルトの名無しさん
2009/10/15(木) 12:41:52もう
googleを攻撃しないであげて
0316デフォルトの名無しさん
2009/10/15(木) 13:47:020317デフォルトの名無しさん
2009/10/15(木) 14:58:17Ctrl+6 や Ctrl+7といった数字のショートカットキー
を禁止にする方法はありませんでしょうか?
検索しても回答がなく、OnKeyでも拾えないので
困っています。
0318デフォルトの名無しさん
2009/10/15(木) 18:03:210319デフォルトの名無しさん
2009/10/15(木) 20:53:16VBAでそのキーを押した際の処理を無効化したいんでしょ。
0320デフォルトの名無しさん
2009/10/15(木) 21:27:48と思いやってみたが本当に拾えないな。
APIにあったと思うけど、スレ的にどうなんだろ。
0321デフォルトの名無しさん
2009/10/15(木) 22:20:200322デフォルトの名無しさん
2009/10/15(木) 22:23:40ライブラリ参照したりAPI使うのはエクセルVBAの構築手段として十分範囲内だと思うけど
API自体の話でもなければ
0323デフォルトの名無しさん
2009/10/16(金) 13:30:41やっぱりおかしいわ
0324デフォルトの名無しさん
2009/10/16(金) 15:39:100325デフォルトの名無しさん
2009/10/16(金) 16:25:15EXCEL2002
現在、クライアントPCのファイルをデスクトップ上にあるイントラネットショートカットアイコンに
ドラッグアンドドロップでファイルをアップロードしているのですが、
クライアントPCのファイルをイントラネットにアップロードする事はVBAで処理可能でしょうか?
0326デフォルトの名無しさん
2009/10/16(金) 17:57:05VBAでイントラネットショートカットアイコンにドラッグアンドドロップ相当の
作業を行うのは幾分は簡単かと思う
0327デフォルトの名無しさん
2009/10/16(金) 20:17:36ショートカットアイコンは
何処へのどんなショートカットなの?
サーバとかの共有フォルダへのショートカットなら
VBA使わなくてもって気もするが
あえてVBAなら
FileCopy すればいいだけのような気がするのだけど
そのへんどうなの?
0328デフォルトの名無しさん
2009/10/16(金) 20:48:18Excel2003ですが、任意の文字列を配列の中から検索して
インデックス番号を返すような処理はどのように行うのでしょう
か?
任意の文字列は必ず配列の中に完全一致で存在します。
また配列内に重複する文字列はありません。
myArray(0)="あああ"
myArray(1)="いいい"
myArray(2)="ううう"
myArray(3)="えええ"
myArray(4)="おおお"
の場合、"ううう"をキーにすれば2を求めたいのですが、配列
を回して比較する程度しか思いつきません。
Findメソッドなどで実現できないでしょうか?
よろしくお願いします。
0329デフォルトの名無しさん
2009/10/16(金) 21:38:56残念ながらVBAだけで一発で検索する方法はない。
検索を第一に考えるなら、2次元配列にデータを入れておき、
必要に応じてワークシートに転送してからワークシート関数で検索するという方法がある。
文字列の長さがすべて一定ならJoinで1つの文字列にまとめてから位置を調べるという手もある。
0330デフォルトの名無しさん
2009/10/16(金) 21:41:08目的によってはDictionaryオブジェクトが使える場合もある
0331デフォルトの名無しさん
2009/10/16(金) 21:49:560332デフォルトの名無しさん
2009/10/16(金) 22:03:32配列のキーの部分が 昇順または降順でソートされているという条件で
古典的なバイナリサーチ手法を使えぱ時間は短縮できる
0333デフォルトの名無しさん
2009/10/16(金) 22:08:25データ入力時に連想セットできたりするかね
0334328
2009/10/16(金) 22:37:34フォルダ内にYYMMDD.xlsというファイルが複数あり、それをソートして
格納してある配列があります。
コンボボックスから2つのファイルを選択したらその期間内のファイルに
対して処理を行うことが目的です。
インデックス番号を取得してFor〜Nextの初期値と最終値にしたか
ったので質問させていただきました。
対象ファイル数は100以下です。
後のメンテを考え、素直に全数比較して新たな配列に格納する
方法で対応してみます。
ありがとうございました。
0335デフォルトの名無しさん
2009/10/17(土) 08:07:18要素数が65536以下ならWorksheetFunction.Matchが使える。
この関数でバイナリサーチも出来るが、要素数が65536も超える場合も考慮するなら自前の関数書いた方がいいな。
要素数がたった100以下ならバイナリサーチじゃなくても無問題だけどな。
0336325
2009/10/17(土) 10:22:18D&D相当の作業、是非教えて頂きたいです。
>>327
ショートカットアイコンは通常のフォルダアイコンに地球の絵が描かれています。
FileCopyで試すと「パス名が無効です」
FS.CopyFileで試すと「ネットワークパス見つかりません」とエラーが出ます。
パス名は"\\サーバ名\フォルダ"」と間違いないと思うのですが・・・・
0337327
2009/10/17(土) 11:16:11「パス名が無効です」 だと共有フォルダ名が間違っている可能性があるけど
確認した?
エクスプローラでそのサーバーが見えるなら パス名確認した方が良いかも
FileCopyは
FileCopy "c:\temp\test.txt", "\\サーバ名\共有フォルダ名\test.txt
FileCopy "c:\temp\test.txt", "\\サーバ名\共有フォルダ名\フォルダ名\test.txt
とかでいいはすなんだけど
サーバー系は、ここ数年やってないんで最新バージョンなんかで仕様が変わっていたら
お手上げですが....
0338337
2009/10/17(土) 11:19:58FileCopyの構文で 最後の " が抜けてた
FileCopy "c:\temp\test.txt", "\\サーバ名\共有フォルダ名\test.txt"
FileCopy "c:\temp\test.txt", "\\サーバ名\共有フォルダ名\フォルダ名\test.txt"
です
失礼しました (^^汗
0339325
2009/10/17(土) 14:59:31パス名は何回も確認しました。プロパティーからコピペしたので間違えてないはずなんですが。
エクスプローラーのプロパティではパス名「http://サーバ名/フォルダ名」なんで、
「http:」外して/を\に変えたんですけど、根本的に間違ってるんでしょうか。
あと、補足ですがサーバはSharePointのワークグループです。
0341デフォルトの名無しさん
2009/10/17(土) 17:01:580342325
2009/10/17(土) 17:12:19やっぱそうなんですね。
xlsやSLK形式のデータはVBAで上書き保存出来たので、試行錯誤してみたんですが残念です。
>>341
ありがとうございます。試してみた所エラーは出ませんでしたが、コピー出来ていませんでした。
どこか違う所にコピーされたんでしょうかね(゚ー゚;Aアセアセ
0343デフォルトの名無しさん
2009/10/17(土) 17:35:43FileCopy "c:\temp\test.txt", "z:\test.txt"
0344デフォルトの名無しさん
2009/10/17(土) 17:43:22非同期なのかも
msgbox "ちょいと待つ"
0345デフォルトの名無しさん
2009/10/17(土) 17:50:48sharepointはブラウザ上でみるとhttp://〜のリンクだけど、実際はWEBDAVでやりとりしてるよ。
http://〜のアドレスをコピペして、新しいブラウザに入力してファイルを開いてみ?
読み取り専用になるから。
対して、\\鯖名\〜だと読み書きできる。
「webdav vba」 で検索すると幸せになれるかも
0346デフォルトの名無しさん
2009/10/18(日) 11:54:53vbaに登録されている(?)errの一覧を知る方法は無いでしょうか?
ループ内でロジックエラーが発生した時にerrに数値を設定してexitさせようと思ってるのですけど
その時にExcelに既に定義されているのとぶつかったら不味いかなと思いまして。
0347346
2009/10/18(日) 12:04:34Raise メソッドに
Visual Basic のエラー (Visual Basic の組み込みのエラーとユーザー定義エラー)
は、0 〜 65535 の範囲の値です。0 〜 512 の値はシステム エラー用に予約されてい
るため、ユーザー定義のエラーに使用できるのは、513 〜 65535 の範囲の値です。
クラス モジュール内で独自のエラー番号を設定するときには、エラー番号を定数
vbObjectError に追加します。たとえば、エラー番号 1050 を発生させるには、名前
付き引数 Number に vbObjectError + 513 を割り当てます。
とありました。スレ汚しすんません
0348デフォルトの名無しさん
2009/10/18(日) 21:13:43目的 あるURLをIEで開き、全てを選択してエクセルに貼り付ける。
Sub ie_test_ExecWB()
Dim objIE As Object
Set objIE = CreateObject("InternetExplorer.application")
objIE.Visible = True
objIE.Navigate "http://google.com"
Do While objIE.Busy = True
DoEvents
Loop
objIE.SendKeys "^a"
objIE.SendKeys "^c"
Range("A1").Select
ActiveSheet.PasteSpecial Format:="HTML"
End Sub
実行すると、
実行時エラー’-2147417848(80010108)':オートメーションエラーです。
起動されたオブジェクトはクライアントから切断されました。
と表示されます。 objIE.SendKeys "^a"objIE.SendKeys "^c"
ではなく、objIE.ExecWB 17, 0 objIE.ExecWB 12, 0でもダメでした。
0349デフォルトの名無しさん
2009/10/18(日) 21:33:330350デフォルトの名無しさん
2009/10/18(日) 21:36:25IEオブジェクトに SendKeys メソッドはないんじゃないの?
そんなことをしなくても、指定のページが開いたら
objIE.document.body.innerText
とすることで現在表示中のページのテキストを文字列として取得できる
0351デフォルトの名無しさん
2009/10/18(日) 21:44:59Do While objIE.Busy = True
でエラーになってて開けないんだろ
0352デフォルトの名無しさん
2009/10/18(日) 22:03:22ほい
Private Declare Function SetForegroundWindow Lib "user32.dll" (ByVal hWnd As Long) As Long
Sub ie_test_ExecWB()
Dim objIE As Object
Set objIE = CreateObject("InternetExplorer.application")
objIE.Visible = True
objIE.Navigate "http://google.com"
Do While objIE.Busy = True
DoEvents
Loop
If SetForegroundWindow(objIE.hWnd) Then
SendKeys "+{TAB}^a^c", True
End If
Set objIE = Nothing
Range("A1").Select
ActiveSheet.PasteSpecial Format:="HTML"
End Sub
0353デフォルトの名無しさん
2009/10/18(日) 22:03:35ではあなたの月火をわたしにください
そうすればあなたに土日をさしあげましょう
0354デフォルトの名無しさん
2009/10/18(日) 22:17:16火憐だぜ
0355348
2009/10/18(日) 22:21:19神々・・・!
ありがとうございます。
現在>>352様が提供してくださったコードで試していますがうまくいきません。
実行するとクリップボードにあるものがA1に貼り付けられてしまいます。
IEが起動するときに、googleのサイトと空のIEが二つ起動してしまうのですが
これが原因なのでしょうか?
ちなみにVISTA,IE7,officeXPという環境です。
>>353
わかりました。
私のカレンダーから月火を捕まえる為の縄を下さい。
0356デフォルトの名無しさん
2009/10/18(日) 22:21:22>ほい
だってw
0357デフォルトの名無しさん
2009/10/18(日) 22:22:580358デフォルトの名無しさん
2009/10/18(日) 22:33:05わざと後出ししたな
0359デフォルトの名無しさん
2009/10/18(日) 22:41:16Sub Macro1()
With ActiveSheet.QueryTables.Add(Connection:="URL;http://www.google.co.jp", _
Destination:=Range("$A$1"))
.Name = "www.google.co.jp"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.WebSelectionType = xlEntirePage
.WebFormatting = xlWebFormattingNone
.WebPreFormattedTextToColumns = True
.WebConsecutiveDelimitersAsOne = True
.WebSingleBlockTextImport = False
.WebDisableDateRecognition = False
.WebDisableRedirections = False
.Refresh BackgroundQuery:=False
End With
End Sub
0361デフォルトの名無しさん
2009/10/18(日) 22:45:470362348
2009/10/18(日) 22:48:17スルーしてました。
これだとテキスト形式での貼り付けになってしまいますね?
ページを丸ごとコピーして(HTML、画像も)貼り付けたいのです。
できるのかな?ちょっとクエリについて勉強してみます。
残り73分で!
0363デフォルトの名無しさん
2009/10/18(日) 23:03:060364デフォルトの名無しさん
2009/10/18(日) 23:06:24正直言おう
その環境を再現して動作確認するのが面倒
0365デフォルトの名無しさん
2009/10/18(日) 23:11:070366デフォルトの名無しさん
2009/10/18(日) 23:17:040367デフォルトの名無しさん
2009/10/18(日) 23:24:31VBA初めて作る初心者です
初めてでIEからデータ取得なんてできるわけないし、
ここにソースを貼ってもらっても使いこなせるわけ無い
むだ
0368348
2009/10/19(月) 00:29:41みんなありがとう
0369デフォルトの名無しさん
2009/10/19(月) 00:32:130370デフォルトの名無しさん
2009/10/19(月) 00:59:37できたら何がダメだったか原因書こうな
たとえショボミスでも、だ
同じ質問がきたときウザいだろ
0371デフォルトの名無しさん
2009/10/19(月) 02:03:39VBAとExcelは余り相性が良くありません。
VBAをExcelの上で使うとVBAもExcelも下手になることが
多いです。Excelを使う場合は、出来る限りVBAを使わず
シートの上の数式だけでなんとか出来ないか先ず考えま
しょう。
Excelで本格的な大量計算を行うのは向いていません。
Excelは概して計算が早く無いからです。
VBAを学びたいというのであればAccessのほうが
がおすすめです。
0372デフォルトの名無しさん
2009/10/19(月) 04:51:580373325
2009/10/19(月) 12:55:44ネットワークドライブの割り当てもやってみたんですが、「ネットワーク名がみつかりません」になってしまうんです。
>>341
やってみましたが、結果は変わらずでした。ありがとうございます。
>>342
オフコン系SEなのでWEBDAVとは初耳でした、ありがとうございます。色々調べてみます。
ちなみに新しいブラウザにURL入力しファイルを開いてもhttp://〜のままでした。
0374デフォルトの名無しさん
2009/10/19(月) 13:33:05WorksheetFunction使えばいいやん
0375デフォルトの名無しさん
2009/10/19(月) 13:47:51unload meと
userform1.hide
が有りますけど(他にもあるのか知りませんが)、この違いって何ですか?
0376デフォルトの名無しさん
2009/10/19(月) 14:33:00hideは見えなくなるだけでまた復活させることができる。例えばテキストボックスの中身とかそのまま残ってる。
unloadは完全に消去
0377デフォルトの名無しさん
2009/10/19(月) 16:21:50簡単に言うとUnloadはメモリから削除してしまう。
hideは字の如くメモリに残したまま見えなくするだけ。
0378デフォルトの名無しさん
2009/10/19(月) 17:22:44ありがとです。
後で再利用するなら hide もう要らないなら unload ですね。
0379デフォルトの名無しさん
2009/10/19(月) 17:47:450380デフォルトの名無しさん
2009/10/19(月) 18:28:22379.visible = false
0381デフォルトの名無しさん
2009/10/19(月) 19:12:37A4サイズに縮小して印刷する方法はないでしょうか?
コードはシンプルに
userform1.printform
だけです。
かなりググッたりしてみましたが、良いホムペもなかったので…
0382デフォルトの名無しさん
2009/10/19(月) 19:37:40いやだからhttp://でアクセスできるんだけど読み取りになるんだよ。
それはhttpプロトコルの制約だから。
http://を\\サーバIPにして後ろの/を全て\になおしてみて。
0383デフォルトの名無しさん
2009/10/19(月) 19:43:01縮小印刷はプリンタドライバの仕事。機種依存になるので自力で試行錯誤が必要
0384デフォルトの名無しさん
2009/10/19(月) 20:33:33リストボックスに3列データを入れる事が出来るようになったとこなんですけど
(1) これタイトルみたいなのを付ける事は出来ないんですか?
コード 商品名 支店 ←付けたいタイトル
9999 xxxxxxxxx xxxxxxx ←データ
みたいな感じで。
(2)
code=Userform1..ListBox1.Text
で選択したコードを拾う事は出来たんですが、この例で商品名を拾うにはどのようにすれば良いのですか?
0385デフォルトの名無しさん
2009/10/19(月) 21:22:18【2 Excelのバージョン】 Excel2000
【3 VBAが使えるか 】 4日目 勉強中
【4 VBAでの回答の可否】 可
まだひよっこちゃんですが皆さんよろしくお願います。
マクロの勉強兼ね、エクセルでTOEICの単語帳を作ろうと思っています。
形としましては、
英単語および日本語訳をシートのA、B列に羅列し、
ユーザーフォームで、
英単語用のテキストBOX1、コマンドボタン1、
日本語用のテキストBOX2、コマンドボタン2
暗記済みのチェックボックスが3つ
という構成で、
コマンドボタン1を押すとランダムで英単語が選択され、テキストボックス1に表示
その状態でコマンドボタン2を押すとその訳がテキストボックス2に表示され、
暗記済みの時はチェックボックスにチェックをつけ、3つたまるとその単語は二度と出てこないようにしようと思います。
また、再度ファイルを開いても単語ごとに同じ状態が保存されているようにしたいと思います。
単語数が600あるという設定で、以下のように作ってみましたが、日本語訳表示の時点で詰まってしまいました。
0386385
2009/10/19(月) 21:24:01End Sub
Private Sub UserForm_Initialize()
End Sub
Private Sub CommandButton1_Click()
Dim intmax As Integer
Dim intmin As Integer
intmax = 600
intmin = 1
TextBox1.Value = Cells(Int((intmax - intmin + 1) * Rnd + intmin), 1)
End Sub
Private Sub CommandButton2_Click()
TextBox2.Value = TextBox1.Value.Offset(0, 1)
End Sub
CommandButton2 の TextBox2.Value = TextBox1.Value.Offset(0, 1)なんかは
明らかにおかしいかと思いますが、テキストボックス1に表示した、英単語をどのように返せばいいのでしょうか。
Cells(Int((intmax - intmin + 1) * Rnd + intmin), 1)を再度使うと、新たなランダム値を取得してしまうのですしょうか?
かなり初歩的かもしれませんが、紙にプリントしてさっさと単語覚えた方が早いんじゃないかと、焦ってきましたもんで
でも何とか完成させたいので、どなたか以下のいずれでもいいのでご教授ください。
・ランダム値が同じ順序ではなく、常に変化する方法
・チェックが各英単語ごとに反映させる方法
・そのチェックがファイルを閉じても保存される方法
・3回チェック済みの英単語を非表示にする方法(削除ではなく)
よろしくお願いします
0387デフォルトの名無しさん
2009/10/19(月) 21:56:18・ Cellsを使う時は、シートを指定したほうが良い
・テキストボックス2に日本語訳を返す為に
英単語を表示する時に使用したセルの行位置を保存しておく
→モジュールレベル変数を利用する
つー事で下記はいかが?
Private mRow As Integer
Private Sub CommandButton1_Click()
Dim intmax As Integer
Dim intmin As Integer
intmax = 9
intmin = 1
mRow = Int((intmax - intmin + 1) * Rnd + intmin)
TextBox1.Value = Worksheets("sheet1").Cells(mRow, 1).Value
End Sub
Private Sub CommandButton2_Click()
TextBox2.Value = Worksheets("sheet1").Cells(mRow, 2).Value
End Sub
0388デフォルトの名無しさん
2009/10/19(月) 22:07:56突然アホみたいに重くなって起動が容易じゃない。
色々調べたけどさっぱり解らない…。
誰か助けてください。
・サイズは600KBほど
・隠れてるオブジェクト無し
・使用範囲以外に隠れデータ一切無し
(書式設定やリンクなど)
・シート30枚ほど
・モジュールの解放もやってみたが改善せず
0389デフォルトの名無しさん
2009/10/19(月) 22:13:45ハードディスクが死にかけてるとか
0390デフォルトの名無しさん
2009/10/19(月) 22:18:010391デフォルトの名無しさん
2009/10/19(月) 22:19:53ファイルの置き場所変わっただけで
リンク先行方不明連発で死亡とかあるから
Excelきらい
0392388
2009/10/19(月) 22:54:19特定ファイルだけです。
会社で作成したデータ集計用のファイルです。
これ1つだけが異常に重くなり、開く時に
CPU100%を食う状況になっています。
>390
ウィルスチェックoffにすることは出来ないです。
会社で常にネットワーク接続されてるもので…。
0393デフォルトの名無しさん
2009/10/19(月) 23:22:01ここは Excel VBAスレなんでスレ的に考えると
VBAの処理が 異常に時間がかかってるのでは?
原因として
・VBAのコードを変更した為に 異常なループが発生した
・元々のVBAのコードにバグがあって あるデータの組み合わせで
異常なループとなった
とか?
だとすれば
とりあえずオープン時実行するイベント処理停めてみたら?
イベントプロシージャの先頭に Exit Sub を入れてみる
0394デフォルトの名無しさん
2009/10/19(月) 23:31:32ローカルにコピって
スタンドアロンのPCでテスト汁
さらにウィルスチェックoffにして開いてみれ
0395デフォルトの名無しさん
2009/10/19(月) 23:46:05xlbファイルを削除する。
CドライブをExcel*.xlbで検索してみて。
0396デフォルトの名無しさん
2009/10/19(月) 23:58:33そんな使い方しないよ。
0397385
2009/10/20(火) 00:54:42値を保存するという便利な方法があったんですね。
勉強になります。おかげさまで単語帳っぽくなりました。
残りのチェックボックスにかかわる部分ですが、もう少し努力してみます。
ただ
・チェックを各英単語ごとに反映させる方法
・3回チェック済みの英単語を非表示にする方法(削除ではなく)
これらがどうにもできそうにないです… すんません
チェックボックスにチェック入れた単語のどこかの列に、何かしら数字など加え
その値を返して、状態を判断することしか思いつかないのですが、
何かもっと良い方法ありますかね?
0398デフォルトの名無しさん
2009/10/20(火) 01:21:27その方法だとこんな問題がある、とかならそれを質問すればいい
もっと良い方法とか漠然と聞かれると速度房がアップ始めるぞ
0399384
2009/10/20(火) 08:16:29(1) これタイトルみたいなのを付ける事は出来ないんですか?
フォームのリストボックスの上方にラベルを配置し、それをタイトルとするように
しました。
(2)code=Userform1..ListBox1.Text で選択したコードを拾う事は出来たんですが、
この例で商品名を拾うにはどのようにすれば良いのですか?
Dim n As Integer
n=UserForm1.Listbox1.ListIndex
xxx = ListBox1.List(n,0)
yyy = ListBox1.List(n,1)
zzz = ListBox1.List(n,2)
以上、スレ汚しでした
0400デフォルトの名無しさん
2009/10/20(火) 10:28:270401デフォルトの名無しさん
2009/10/20(火) 12:38:07俺は速度より美しいか汚いかにこだわるが、たまに速度厨と勘違いされる。
汚いのは遅いって大体決まってるけどな。
そこの君、お前だよw
0402デフォルトの名無しさん
2009/10/20(火) 19:25:43完成したらサンプル見せてください。お願いします。
0403デフォルトの名無しさん
2009/10/20(火) 21:14:22セルA1〜A10まで100
A11に1
この状態で1がある行番号を手に入れたいんですが
結果は2です。
どうやったら11を入手出来るんでしょうか?
Dim rng As Range
Set rng = ActiveSheet.Range("A1:A11").Find(1)
A = rng.Address
B = Rows(A)
0404デフォルトの名無しさん
2009/10/20(火) 21:21:06誰を煽ってるんだよw
唐突過ぎてわろたわ
0405デフォルトの名無しさん
2009/10/20(火) 21:49:07100 という文字列での 1の部分でヒットしているみたいね
とりあえず下記ではどう?
Set rng = ActiveSheet.Range("A1:A11").Find(1, LookAt:=xlWhole)
0406デフォルトの名無しさん
2009/10/20(火) 21:56:200408デフォルトの名無しさん
2009/10/20(火) 22:09:020409392
2009/10/20(火) 22:43:00tmpファイルを全て削除してみたところ、
かなり軽減されましたがまだ反応が鈍かったため、
思い切って新規エクセルに全て
コピーしてみました。
結果、快適に動くようになりました。
おまけにサイズも400kbまで小さくなりました。
0410デフォルトの名無しさん
2009/10/20(火) 22:57:36有難うございます。
明日になってしまいますけど、試してみます。
上手くいったら、その時に
LookAt:=xlWhole
の意味を理解したく教えて下さい。
0411デフォルトの名無しさん
2009/10/20(火) 23:29:44勉強しはじめなら、セルを一個一個確認してループさせる手法からハイルべき
特にエクセルVBAなら
0412405
2009/10/20(火) 23:37:10>>411 の意見には賛成です
今回の場合は特に
>>410 の質問の回答ですが
Findは Excel本体の検索とほぼ同じものです
マクロの記録をいろいろしてみると分かると思いますが
"完全に同一のセルだけを検索する"です
それと>>407 へ書いたけど
セルの表示形式が数値だと失敗するかもです
一応 標準形式だとうまく検索できたのだけど
0413デフォルトの名無しさん
2009/10/21(水) 07:11:50まさか数値を検索してバグがあるなんて言ってるんじゃねーだろうな。
0414デフォルトの名無しさん
2009/10/21(水) 13:53:110415325
2009/10/21(水) 15:09:21ありがとうございます。勘違いしてました・・・・
しかし、\\サーバIPにしてもだめでした。
Sub COPY_SAMPLE()
Dim objShell
Dim objFolder
Set objShell = CreateObject("Shell.Application")
Set objFolder = objShell.NameSpace("\\サーバ名\フォルダ名1\フォルダ名2")
If (Not objFolder Is Nothing) Then
objFolder.CopyHere "c:\TEST.txt"
Else
MsgBox "Nothing"
End If
Set objFolder = Nothing
Set objShell = Nothing
End Sub
Nothingのメッセージボックスが出ます・・・
0416デフォルトの名無しさん
2009/10/21(水) 15:37:47自分が持ってんのがどっちなのかによるでしょ。
今からなら2007の方が良いのかなとは思うけど。
0417デフォルトの名無しさん
2009/10/21(水) 16:11:22ありがとうございます。持ってるのが2000と2007だったので2007勉強することにしました
0418デフォルトの名無しさん
2009/10/21(水) 20:02:120419デフォルトの名無しさん
2009/10/21(水) 20:03:45http://q.hatena.ne.jp/1108018134
これでやってみな。
ヒントはきちんといかそうぜ。
0420410
2009/10/21(水) 21:43:51上手くいきました。有難うございます。
>413
そのまさかなんですが・・・
なんとか上手くいきました。独学&ヘルプ@2007ではなかなか上達しないですね。今度、本屋行ってきます!
0421デフォルトの名無しさん
2009/10/21(水) 22:04:580422デフォルトの名無しさん
2009/10/21(水) 22:09:25http://namidame.2ch.net/test/read.cgi/yasai/1223375038/
0423デフォルトの名無しさん
2009/10/21(水) 22:51:50XP、office2000において、onactionで呼び出すsub hogeにsingleの引数を複数渡したいのですが、どのようにすればよいか教えてください。
.onaction("'hoge, arg1,arg2'")
とかだとうまくいきませんでした。
0424デフォルトの名無しさん
2009/10/21(水) 23:41:28例えば、A4の値及びB4の値によって条件を分岐させたい時に (A4 1または2 B4 同じく 1または2)
Select Ccase Cells(4,1) Cells(4,2)
case 1 1
case 1 2
…
end select
みたいな使い方出来ないんですかね?Excel2007では
select case cells(4,1) cells(4,2) でエンター押した瞬間に
エラーになっちまいましたが。
0425デフォルトの名無しさん
2009/10/21(水) 23:52:34変数とかに格納したり論理結合したり
ただ1か2のどちらかなら、文字列結合すりゃいい
0426デフォルトの名無しさん
2009/10/21(水) 23:58:26了解しました
0427デフォルトの名無しさん
2009/10/22(木) 09:32:17.OnAction = ”'hoge””arg1””,””arg2””'”
0428デフォルトの名無しさん
2009/10/22(木) 11:55:51列AQの行n1の文字列hoge1を取得して、hoge1を列Cより検索、
発見したらその行n2の列Bの文字列hoge2を列AUのn1のセルに代入
これをAQの行全てで実行したいのです
Cにおいてhoge1が重複することはありません
どうかよろしくお願いいたします
0429デフォルトの名無しさん
2009/10/22(木) 12:04:240430デフォルトの名無しさん
2009/10/22(木) 12:21:27そーゆーときは配列に流して連想しる
0431デフォルトの名無しさん
2009/10/22(木) 13:47:33XPでExcel2003です
列Dの行n1の文字列hoge1を取得して、hoge1を列Cより検索、
発見したらその行n2の列Bの文字列hoge2を列Hのn1のセルに代入
これをDの行全てで実行したい、に変更させてください
VBAとExcelマクロの知識が0なんです…
vlookupという関数を使えばいいのですか?
Cは2988行、Dは1284行です
sub test()
dim name as string
for i = 1 to 1284
name = cells(i, 4)
if (vlookup(D$i, C1:C2988, 2, false)) = name then
copy()
pastespecial()
endsub
こんな方向性で大丈夫ですか?
0432325
2009/10/22(木) 14:38:41そのURLはググってる最中に何度か訪れたんですけど、
ちょっと私には扱えそうもなかったんでスルーしてたんですけど、
頑張って調べながらやってみたら2〜3度エラーが出ましたが、
希望通りアップロード出来ました!誠にありがとうございました。
一年分の便秘が治ったようなすがすがしい気分ですw
0433デフォルトの名無しさん
2009/10/22(木) 15:16:28no
0434325
2009/10/22(木) 15:22:42すいません、これってLZHファイルとかは扱えないんでしょうか?
TXTやSLK形式は成功したんですけど、LZH形式はエラーになったんです・・・
0435434(325)
2009/10/22(木) 15:26:16LZH形式もいけました。ファイル名が不味かったようです。
0436434(325)
2009/10/22(木) 15:28:23LZH形式、エラーこそ出ませんでしたが、解凍すると文字化けしてまいした。
0437434(325)
2009/10/22(木) 15:46:49スレ汚しすみませんでした。逝ってきます。
0438デフォルトの名無しさん
2009/10/23(金) 00:08:18言いたい事は分かるんだけどさ。
列Dだの列Hだの、n1だn2だって、そんなのどうでもいいよ。
それで作りたいんだろうけど、読んでて辛いです。
Aから探してBにコピーとかでいいじゃん。組み合わせるだけでしょ。
for i = 1 to 1284
name = cells(i,4).value
set rng = columns(3).find(name)
if not rng is nothing then
rng.offset(0,1).value = rng.value
end if
next
みたいな考え方でやるよ。俺なら。
今ブラウザで書いたんで、動作保障も無し。
0439434(325)
2009/10/23(金) 09:54:04実行時エラーになります。回避する方法ありますでしょうか?
D&Dでうpすると正常に出来るんですが・・・・
0440431
2009/10/23(金) 11:17:12わーい!教えていただいたものを道標に調べつつやってみたらできました!
一応完成版を張っておきます
Sub macro()
Dim code As String
Dim rng As Range
Dim name As String
For i = 2 To 1284
code = Cells(i, 4).Value
Set rng = Columns(3).Find(code)
If Not rng Is Nothing Then
name = rng.Offset(0, -1).Value
Cells(i, 9).Value = name
End If
Next
End Sub
ありがとうございました!
0441デフォルトの名無しさん
2009/10/23(金) 12:20:06エンコードでぐぐりな。
0442デフォルトの名無しさん
2009/10/23(金) 12:29:34そんなんで完成?
Findメソッドの引数が1個だけって大丈夫カヨ
WhatとLookInとLookAtの最低三つは必要じゃないの?
0443デフォルトの名無しさん
2009/10/23(金) 13:52:52一応ちゃんと動作しましたよ!
今回一回だけ動けばいいマクロなので、結果に間違いがなければOKです!
0444デフォルトの名無しさん
2009/10/23(金) 14:17:40そりゃたまたまでんがな。
何もいじくってない状態じゃ部分一致だが、それでいいの?
0445デフォルトの名無しさん
2009/10/23(金) 14:28:400446デフォルトの名無しさん
2009/10/23(金) 14:38:09う、もしかして上手くいったと勘違いしてるだけなんですかね…
codeはxx01みたいな形で、nameは文字列(重複部分多々あり)なんですが
ちゃんと調べてみます!
0447お願いします><
2009/10/24(土) 01:26:35学校の宿題で
「y=sinXとY=Xの2本の直線で囲まれた面積をVBA関数を用いて求めなさい。」
という問題がでました><
ですが、今日初めてVBAという言葉を聞いたぐらいですので、まったく分かりません( ;∀;)
どなたか記入するコードを教えて頂けないでしょうか?
0448デフォルトの名無しさん
2009/10/24(土) 01:45:00何の前提もなしにそんな宿題が出るはずないから、わからないのは貴方がサボっていたってことでしょ
0449デフォルトの名無しさん
2009/10/24(土) 02:20:060450デフォルトの名無しさん
2009/10/24(土) 02:45:13これは酷いwww
これが社会に出て行くと思うと末恐ろしいな
0451デフォルトの名無しさん
2009/10/24(土) 10:22:290452デフォルトの名無しさん
2009/10/24(土) 10:57:44遅レスですが、こんなアイディアも。
Select Case Cells(4,1) & Cells(4,2)
case "11"
case "12"
0454デフォルトの名無しさん
2009/10/24(土) 11:43:07=G5*K3+M1
セル参照+数字の計算式
=F6*G6*3.14
数字のみの計算式
=15*21*45
この数式を区別して色分けする事は可能ですか?
せめて上2つと下1つだけでも区別できればいいんですが
0455デフォルトの名無しさん
2009/10/24(土) 11:47:42正弦波だから、Y=1 から Y--1 までを往復する曲線かな。
Y=Xの直線とは1点交差するけど、2点とは交差しなんじゃないか?
よくわかんないけどw
0456デフォルトの名無しさん
2009/10/24(土) 12:13:36問題の意味すらわかんないならVBA以前の問題
0457デフォルトの名無しさん
2009/10/24(土) 12:25:460458デフォルトの名無しさん
2009/10/24(土) 12:31:590459デフォルトの名無しさん
2009/10/24(土) 13:43:37手元にPCがないから確認できないけど、今ぱっと思いついた案が1つある。
セルに入力されている数式を取得し、文字列操作関数を使用し演算子の部分で区切る。
区切られた文字列を確認して全てにアルファベットが含まれていれば、セル参照あり、全く含まれていなければセル参照なし。
その他は混合。
どうでしょう?
文系のおいらの考えなので、バカかと思う方はたくさんいると思うけど。
0460デフォルトの名無しさん
2009/10/24(土) 13:46:03「セル参照あり」→「セル参照のみ」だったよ。
0461デフォルトの名無しさん
2009/10/24(土) 15:08:03Y=sinXとY=Xは3点で交わって、囲まれた領域は2つだ
片方だけ積分して倍すればいい
0462デフォルトの名無しさん
2009/10/24(土) 19:24:380.100000000E+00
0463デフォルトの名無しさん
2009/10/24(土) 19:26:00kwsk
0464デフォルトの名無しさん
2009/10/24(土) 20:36:00セル参照があるかないかだけですが
一つの案として下記なんかはどうでしょうか?
一部の関数を使用していると判定ミスしちゃいますが(DAYS360 とか)
With ActiveSheet.Cells(i, j)
If (.Formula Like "=*[A-Z][1-9]*") Or (.Formula Like "=*[A-Z]$[1-9]*") Then
'セル参照を含む数式
.Interior.ColorIndex = 34
Else
'セル参照を含まない数式 又は 定数
.Interior.ColorIndex = 40
End If
End With
0465デフォルトの名無しさん
2009/10/24(土) 21:22:20最初に「=」が付いてるか確認すれば問題ないと思う。
0466デフォルトの名無しさん
2009/10/24(土) 22:22:360467デフォルトの名無しさん
2009/10/24(土) 22:27:460468デフォルトの名無しさん
2009/10/24(土) 22:36:560469デフォルトの名無しさん
2009/10/24(土) 22:42:260470デフォルトの名無しさん
2009/10/24(土) 22:44:17そういう話になってくると正規表現?
0471デフォルトの名無しさん
2009/10/24(土) 23:17:41*[A-Z]$[1-9]*
の、文末一致or後方参照の $ が説明付かない。
0472デフォルトの名無しさん
2009/10/25(日) 00:45:26userform.text1と書くと思いますが、
text1、text2と順番に参照していきたい時、イメージとしては"text"&i のように変数で指定したいんですがエラーになってしまいます。
何かいい方法はないでしょうか?
0473デフォルトの名無しさん
2009/10/25(日) 01:25:10ダブルクオーテーションマークが検索したい文章内にある場合どうすればいいのでしょうか。
具体的には
<IMG class="reslevel rf1 level2" alt="きこり レベル 2" src="img/x.gif">
というouterHTMLの文字列に一致したらdo while構文を抜け出すという形にしたいのです。
Do until objIE.document.all.outerHTML = "<IMG class="reslevel rf1 level2" alt="きこり レベル 2" src="img/x.gif">"
という形でダブルクオテーションで括ったのですが「コンパイルエラー」となってしまいます。
どうすれば回避できるか教えていただけないでしょうか。
0474デフォルトの名無しさん
2009/10/25(日) 01:25:54配列変数を使う(text1とtext2を配列変数に突っ込んで使う)
0475464
2009/10/25(日) 01:41:33>>464を書いたのは自分だけど
正規表現だと、 $は特殊な意味をもつの?
Like 演算子では特殊な意味をもつようにはHELPに
書かれていなかったんで
.Formula Like "=*[A-Z]$[1-9]* は
=$A$1 とか =A$1 という形式でのセル参照も判定させたいので
付けたんです
もしかして
.Formula Like "=*[A-Z][$][1-9]*"
って書いた方が正解なのかな?
0476デフォルトの名無しさん
2009/10/25(日) 02:00:43ありがとう
0477デフォルトの名無しさん
2009/10/25(日) 02:59:44http://msdn.microsoft.com/ja-jp/library/h5181w5w.aspx
少しは調べろよカス
0478デフォルトの名無しさん
2009/10/25(日) 08:59:51だから、正規表現じゃないって言ってるのだよ。
=$A$1 を判定させるマッチパターンは、
pattern = "=\$[A-Z]\$[0-9]"
0479デフォルトの名無しさん
2009/10/25(日) 15:58:071つのフォルダーにあるいくつかのcsvファイルの全てのA列からC列のデータを削除したいのです
そういうvba作ってもらえませんか?
どうかお願いします
0480デフォルトの名無しさん
2009/10/25(日) 16:05:55>>2の★5を100万回読むんだ
0481デフォルトの名無しさん
2009/10/25(日) 16:06:04待ってな
0482デフォルトの名無しさん
2009/10/25(日) 17:02:08いくらくれる?
0483デフォルトの名無しさん
2009/10/25(日) 22:05:39お金は…ないんです(T_T)
0484デフォルトの名無しさん
2009/10/25(日) 23:30:41ここに標準モジュールで作ったプロシージャをコールしても反映してくれません。
なぜでしょう?
0485デフォルトの名無しさん
2009/10/25(日) 23:38:10・現状どうなっているのか
・それに対する自分の意見
・自分の環境は何なのか(CPU,OS,Office)
・サンプルをアップローダーに。
このくらいは質問するなら情報として欲しいわ。
0486484
2009/10/25(日) 23:48:06コンボボックスにあらかじめ入れておく項目は標準モジュールからは呼び出せないか。
0487デフォルトの名無しさん
2009/10/25(日) 23:54:43質問?
コンボボックス
リストボックスのリストは標準モジュールで指定出来るでしょ
値を入れておきたいならValueに入れればいいでしょ
0488デフォルトの名無しさん
2009/10/26(月) 09:00:41エクセルでCSV開く
該当行削除
保存
記録停止
↑で出てた正規表現ってよくわかんないんだが何が出来るの
0489デフォルトの名無しさん
2009/10/26(月) 09:57:050490デフォルトの名無しさん
2009/10/26(月) 17:17:01Dim oldStatusBar
With Application
.ScreenUpdating = False
oldStatusBar = .DisplayStatusBar
End With
〜処理〜
With Application
.ScreenUpdating = True
.DisplayStatusBar = oldStatusBar
End With
として処理中、statsubarに "現在 " & code & " を処理中"としてcodeを
表示させているのですが、終了後に
"現在 0 を処理中" となります。
これを処理終了後には何も表示させなくしたいのですが、どうすれば
良いのでしょうか。
.DisplayStatusBar = ""とすると、
実行時エラー 13
型が一致しません
となります。
0491デフォルトの名無しさん
2009/10/26(月) 20:36:59Long型の数値からリトルエンディアンByte(4)型に分割したいのですが、どのようにしたらよいでしょうか。
VBだとLong型が8バイトと聞いたので、こちらに質問しました。
よろしくお願いします。
0492デフォルトの名無しさん
2009/10/26(月) 22:09:15どこが変なんでしょ?
CODE
var path='C:/Program Files/Microsoft Office/Office/excel.exe';
var args='';
this.setAttribute('oncommand','this.startProcess("'+path+'","'+args+'")');
this.startProcess=function(path,args){
var file = Components.classes['@mozilla.org/file/local;1']
.createInstance(Components.interfaces.nsILocalFile);
var process = Components.classes['@mozilla.org/process/util;1']
.getService(Components.interfaces.nsIProcess);
file.initWithPath(path.replace(/\//g,'\\\\'));
process.init(file);
process.run(false,[args],1);
}
0493デフォルトの名無しさん
2009/10/26(月) 23:13:302007は知らんけど2003ならば
Application.StatusBar = False
0494デフォルトの名無しさん
2009/10/27(火) 00:26:15VBAのLongは4バイトです
8ビットずつマスクとシフトしながら分割してください
0495デフォルトの名無しさん
2009/10/27(火) 00:27:36VBSはスレチ
0496491
2009/10/27(火) 01:21:41ありがとうございます。
ただ、そのままするとマイナスの値のときにおかしくなってしまいます。
もうすこし詳しく教えていただけないでしょうか。
0497デフォルトの名無しさん
2009/10/27(火) 01:34:34MSBだけ別の変数にとっとけばいい
0498デフォルトの名無しさん
2009/10/27(火) 01:41:110499491
2009/10/27(火) 16:25:08ありがとうござました。
マイナス関係なくできました。
難しく考えすぎてたみたいです。
0500デフォルトの名無しさん
2009/10/27(火) 19:39:03Dim strPath As String
Dim wkb As Excel.Workbook
Dim wks As Excel.Worksheet
Dim rng As Excel.Range
Dim col As New Collection
strPath = Excel.Application.GetOpenfilename
If strPath = "False" then
Exit Sub
End If
Set wkb =Excel.Workbooks.Open(strPath)
Set wks = wkb.Sheets("Sheet1")
Set rng = wks.Range("A1")
call col.Add(rng)
If Not(wkb Is Nothing) Then
Call wkb.close: Set wkb = Nothing
End If
If col Is Nothing Then
Set rng = col.Item(col.count)
Debug.Print rng.Value
End If
End Sub
'colって、Nothingじゃないの?
'Is Nothingの対象はRange型のcolでは無くて、col自体を対象としてんのかな。
0501デフォルトの名無しさん
2009/10/27(火) 20:01:280502デフォルトの名無しさん
2009/10/27(火) 22:27:302003及び2000で動いてくれれば・・
アクセス側から、あるワークシートにおいて、
Set myWKS = myWKB.Worksheets("test")
With myWKS
t = DCount("*", "T1")
.Range("A10").CopyFromRecordset myRS
.Range("A10:D" & t + 9).Select
.Application.ActiveCell.Sort Key1:=Columns("C"), Order1:=xlAscending, Header:=xlNo, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlSortColumns, SortMethod:=xlStroke
.SaveAs "C:\Documents and Settings\Owner\デスクトップ\sample\テスト作成.xls"
.End With
という処理を行っています。
アクセスを起動後1回目は、ソートが正常に動きますが、2度目以降はうまくソートしてくれません。
次にこのメソッドを使用するときに、引数を指定しなかった場合は、保存されていた値が使用されます。
と、ヘルプにもあるように、ここにひっかかっているのだと考えていますが、
どうにも原因を突き止められません。
どうぞよろしくおねがいします。
0503デフォルトの名無しさん
2009/10/27(火) 23:15:04理由は先ほどエラーが出ていたときは1度目の実行はうまくいくのにエクセルファイルを閉じても
エクセルのプロセスが残ったままになっており2度目はその影響(?)で失敗していました。
コード自体に問題はなく、参照設定のexcelオブジェクトの優先順位を一つ上にあげてやれば、
正常に2度目以降も動くようになりました。
ただ、凄く不安定な正常性ということなので、根本を解決できる何かがあれば
是非アドバイスおねがいいたします。
0504デフォルトの名無しさん
2009/10/27(火) 23:45:25エラー出たときとか終わるときにちゃんと閉じてる?
0505デフォルトの名無しさん
2009/10/28(水) 00:36:54オブジェクト指定をしっかり作ったエクセルアプリケーションにしていなかったり、
いきなり.Rangeにしてたりで、タスマネに5個ぐらいEXCELってありましたw
コード多すぎて無理臭いので、クエリのほうから指定することにしました。
以降はいい加減に組まないように注意せねばでした。
ありがとうございました
0506デフォルトの名無しさん
2009/10/28(水) 10:55:560507デフォルトの名無しさん
2009/10/28(水) 11:13:24バージョン書いてね
0508デフォルトの名無しさん
2009/10/28(水) 13:01:210509デフォルトの名無しさん
2009/10/28(水) 13:19:44質問の内容とタイミングによる
時間帯と曜日によって、宿題は自分でやれってレスが付くだけのこともあるし
VBA厨が喜んでプログラムを作ってくれることもある
0510デフォルトの名無しさん
2009/10/28(水) 13:55:04Excel2003
めっちゃ初歩的です…
Do〜LoopかForーNextを使わなければならないみたいです。
1〜10までの整数で
偶数の和をD1
奇数の和をE1
に表示せよ です。
0511デフォルトの名無しさん
2009/10/28(水) 14:02:20ありません。
VBAの練習をしたいのなら、Accessでやれっつーの
(AccessではExcelでやれっていわれるかも)
てなわけで、Active BASICがVBAと文法互換だったら
いいのになとおねだりしよう
【サーバー各所】ActiveBasicその11【冬眠中】
http://pc12.2ch.net/test/read.cgi/tech/1241316033/
0512デフォルトの名無しさん
2009/10/28(水) 15:07:11あほか。Access持ってる奴なんてごく少数だろうが。
0513デフォルトの名無しさん
2009/10/28(水) 15:22:58エクセルなら(初めの内は)オブジェクト志向を意識しないでコードが組める上、マクロの記録がある
マクロの変換じゃなくて、操作をVBAに変換するから、体感出来る点が非常に優位
逆に初めからRecordset操作を理解したほうが後が楽かもしらんけども
0514デフォルトの名無しさん
2009/10/28(水) 16:37:27VBA扱う場合はやっぱフォームから入るべきだろ。
テキストボックスで入出力でいいじゃん
Excelの場合CellをVBAで扱うのは、VBAだけじゃ不十分で
VBAの基本とExcelの基本が十分出来上がって独立
共存できるようになってからじゃないと両方駄目になる悪寒
Accessの場合はVBAが出来てからテーブルやらクエリ
やら覚えていく方法がとれる。
0515デフォルトの名無しさん
2009/10/28(水) 17:06:490516デフォルトの名無しさん
2009/10/28(水) 18:30:39例えば、セルJ6に名前をInputBoxを使って入力した時に、セルJ5にフリガナをカタカナで
自動で表示する場合はどのようにすればよいでしょうか?
0517デフォルトの名無しさん
2009/10/28(水) 20:57:080518デフォルトの名無しさん
2009/10/28(水) 21:23:03フリガナを表示しないで、氏名(漢字)が表示されてしまいます。
0519デフォルトの名無しさん
2009/10/28(水) 21:39:35名前と読み方リスト作ろうぜ
0520デフォルトの名無しさん
2009/10/28(水) 21:44:070521デフォルトの名無しさん
2009/10/28(水) 21:51:46どう料理するかは考えてないけど
テキストボックスに名前入れると読み仮名ラベルに表示するとかかな
0522デフォルトの名無しさん
2009/10/28(水) 21:58:13宿題なのかな?答え書いたら勉強にならないから、ヒント書いておくね。
for i = 1 to 10 next
if i and 1 = true then 奇数
if i and 1 = false then 偶数
cells(4,1).value = cells(4,1).value + i
がんばって。
0523デフォルトの名無しさん
2009/10/28(水) 22:07:250524デフォルトの名無しさん
2009/10/28(水) 22:08:510525517
2009/10/28(水) 22:16:47なるほど、セルに直接入力しない場合で、phoneticを使用する場合は工夫が必要だね
0526デフォルトの名無しさん
2009/10/28(水) 22:40:030527デフォルトの名無しさん
2009/10/28(水) 22:49:49↓
Excelを終了
とするにはどういうふうに構文をかけばよいでしょうか?
0528デフォルトの名無しさん
2009/10/28(水) 22:59:33Application.Quit
0529デフォルトの名無しさん
2009/10/28(水) 23:49:49For i = 1 To n
Next
和 = (1 + n) * n / 2
みたいなのがあったな。
0530デフォルトの名無しさん
2009/10/28(水) 23:53:53ビット演算なんて分るやつあまりいないんだから、そういう知ったかぶりの回答はやめましょうね。
0531デフォルトの名無しさん
2009/10/29(木) 00:19:50偶数 = 0
For i = 1 To 10 Step 2
奇数 = 奇数 + i
偶数 = 偶数 + (i + 1)
Next
Debug.Print 奇数, 偶数
0532デフォルトの名無しさん
2009/10/29(木) 00:26:27>ビット演算なんて分るやつあまりいないんだから
え!そうなの?
0533デフォルトの名無しさん
2009/10/29(木) 00:48:08教えてくれとは書いていなかったけど、よかったら参考にしてください。
Sub PlzDoHomeworkByYourself()
Range("D1").Value = 0
Range("E1").Value = 0
' The following was written by someone on the net.
For i = 1 To 10
If (i Mod 2) = 1 Then '2で割り切れない場合(奇数)
Range("E1").Value = Range("E1").Value + i
Else '2で割り切れる場合(偶数)
Range("D1").Value = Range("D1").Value + i
End If
Next
' If you're a teacher, you ought to punish your student who didn't do homework himself.
End Sub
0534デフォルトの名無しさん
2009/10/29(木) 01:18:45ありがとうございます!!また頼むかもしれませんがよろしくお願いします。
0535デフォルトの名無しさん
2009/10/29(木) 01:45:25Dim rng As Excel.Range
Dim i As Integer
Set rng = Excel.ThisWorkbook.Sheets("Sheet1").Range("D1")
With rng
'初期化
.Offset(0, 0) = 0 '$D$1
.Offset(0, 1) = 0 '$E$1
For i = 1 To 10
Select Case True
Case (i Mod 2) <> 1 '偶数
.Offset(0, 0) = .Offset(0, 0).Value + i
Case (i Mod 2) = 1'奇数
.Offset(0, 1) = .Offset(0, 1).Value + i
End Select
Next i
'初期化
.Offset(0, 0) = 0 '$D$1
.Offset(0, 1) = 0 '$E$1
i = 1
Do While i < 11
Select Case True
Case (i Mod 2) <> 1 '偶数
.Offset(0, 0) = .Offset(0, 0).Value + i
Case (i Mod 2) = 1'奇数
.Offset(0, 1) = .Offset(0, 1).Value + i
End Select
i = i + 1
Loop
End With
End Sub
0536デフォルトの名無しさん
2009/10/29(木) 02:03:47For i = 1 To 10
Cells(1, 4 + (i And 1)) = Cells(1, 4 + (i And 1)) + i
Next
0537デフォルトの名無しさん
2009/10/29(木) 09:15:12officeのVBAだと使わないしねぇ
vbaだと知ってても使う場面がほとんど無い品
0538デフォルトの名無しさん
2009/10/29(木) 09:24:31なにそれ面白い
ビット演算とか知識はかろうじてあるけどナニソレ
0539デフォルトの名無しさん
2009/10/29(木) 12:14:21For i = 1 To n Step n
Next
和 = (1 + n) * n / 2
0540デフォルトの名無しさん
2009/10/29(木) 12:21:10vbaでie制御して、ieのframes(a)内を全選択してコピーしたい。
frames(a)を全選択することが重要で、frames(b)の情報は必要ないし、innerText等での情報取得は避けたい。
ExecWBとSendKeysでやってみたが上手く行かなかった。
やり方に問題があるのか、違う方法があるのか?
教えてください。
0541デフォルトの名無しさん
2009/10/29(木) 12:21:25for i = n to n
next
0542デフォルトの名無しさん
2009/10/29(木) 12:46:51For i = 1 To n
Exit for
Next
和 = (1 + n) * n / 2
0543デフォルトの名無しさん
2009/10/29(木) 13:08:40Goto aaa
For i = 1 To n
Next
:aaa
和 = (1 + n) * n / 2
0544デフォルトの名無しさん
2009/10/29(木) 13:21:48Debug.Print 和
ループ
こうか!
0545デフォルトの名無しさん
2009/10/31(土) 10:22:29ExcelでRS-232-C通信を行おうとしております。
大昔に一度、何かを見ながら自作したマクロを参考にやっています。
当時はMSCommを使用しておりましたので、同様にツールボックスから
MSCommをフォームに貼り付けると、
「サブジェクトは指定された操作に対して信頼されていません。」
と表示され、貼り付けることができません。
Webで調べると、どうやら
ActiveX Killbits に対するセキュリティ更新プログラム (KB969898)
を実行したことで使用出来なくなってしまったようです。
対策はこれを削除とのことですが他へ配布したりPC乗り換えごとに
削除して回るのも非現実的です。
MSCommが分かりやすくて簡単ですのでこれを使用したいのですが
更新プログラムの削除や新たに何かをインストールしなくても使用できる
方法はないでしょうか?
また他にWinAPIで行う方法もありましたがこちらで行う方法が主流?
なのでしょうか?
よろしくお願いします。
0546デフォルトの名無しさん
2009/10/31(土) 13:10:43>ActiveX Killbits に対するセキュリティ更新プログラム (KB969898)
>を実行したことで使用出来なくなってしまったようです。
>対策はこれを削除とのことですが他へ配布したりPC乗り換えごとに
>削除して回るのも非現実的です。
>MSCommが分かりやすくて簡単ですのでこれを使用したいのですが
>更新プログラムの削除や新たに何かをインストールしなくても使用できる
>方法はないでしょうか?
自分で何言ってるか分かってる?
0547545
2009/10/31(土) 15:21:48失礼しました。
>MSCommが分かりやすくて簡単ですのでこれを使用したいのですが
>更新プログラムの削除や新たに何かをインストールしなくても使用できる
>方法はないでしょうか?
MSCommのようなコントロールが分かりやすくて簡単ですのでこの様なコン
トロールを使用したいのですが更新プログラムの削除やフリーのアドインなど
をインストールしなくても使用できる方法はないでしょうか?
(MS系の更新インストールや代替コントロールのインストールは可)
WinAPIはサンプルを見てもまださっぱり理解できないので出来れば避け
たいのですが、今から作るのであればコントロールではなくWinAPIで行う
べきでしょうか?
よろしくお願いします。
0548デフォルトの名無しさん
2009/10/31(土) 19:18:220549デフォルトの名無しさん
2009/10/31(土) 19:33:45公開されていたDLLとかの機能を殺してしまってモノシリッ
ク化しつつある疑似カーネル群のコードを間接的に使うように
することだったんでつね
0550デフォルトの名無しさん
2009/11/02(月) 11:29:29ttp://ziddy.japan.zdnet.com/qa5065179.html
これはどう?
0551545
2009/11/02(月) 22:21:47ありがとうございます。
投稿前にこれも試したのですがVB6が入ってないから
ダメと言われました。
WinAPIに挑戦してみます。
ありがとうございました。
0552デフォルトの名無しさん
2009/11/03(火) 05:55:57EasyCommというモジュールを使うと、素人の自分でも簡単に機能実現出来ました。
0553デフォルトの名無しさん
2009/11/03(火) 13:19:49VB6のSP6のruntimeのみってvectorとかに無い?
#自分はsp5の使ってるけど
0554デフォルトの名無しさん
2009/11/03(火) 13:36:56コメント読んだらシステム破壊の事が書かれてて怖いわw
俺は昨日ソフト更新系のサイトでコレを発見したので入れてみた。
ttp://www.hmpage.jp/vb6rtest.htm
セットアップがVB6のプロジェクトのタイプなので、インストール後に
アンインストールして、ライブラリ類は全残しでいけた。
0555デフォルトの名無しさん
2009/11/03(火) 14:58:37最近知ったけどStringBuilderとか使えて便利だ
0556デフォルトの名無しさん
2009/11/03(火) 15:35:51知らんかった・・・・・
#まともなhash使えるとかなりうれしいなぁ
0557デフォルトの名無しさん
2009/11/04(水) 21:19:250558557
2009/11/04(水) 21:20:45ADO.NET
0559デフォルトの名無しさん
2009/11/04(水) 22:32:00俺は2007だけどADOでアクセス(という言い方でいいか)してる。
0560デフォルトの名無しさん
2009/11/04(水) 23:40:03まぁ、そこまでしてやるもんでもないと思うしVSTOでも検討した方がいい
0561デフォルトの名無しさん
2009/11/07(土) 09:08:12ネット検索で検索ヒット件数を取得し
A1A2・・・にある単語の件数をB1B2・・・に記録したいのですが、
グーグルでは取得拒否にあってしまい、ヤフーで挑みたいのですが、
送信するのに文字を %5%7 とかにしないといけない(どういうキーワードに
つなげるかもわからない)みたいなのですが、
この送信ワード http://yahoo.co.jp/search??????? %5%6
とかの、?????と 文字の変換方法を教えていただける方いらっしゃいませんでしょう
か?
0562デフォルトの名無しさん
2009/11/07(土) 09:13:040563デフォルトの名無しさん
2009/11/07(土) 09:39:23というのです。別段500でもいいから自動化させたいのですが・・・
そこには例文がなくて・・・どこかにフォーラムでもないでしょうか?
http://developer.yahoo.co.jp/webapi/search/websearch/v1/websearch.html
0564デフォルトの名無しさん
2009/11/07(土) 11:05:120565デフォルトの名無しさん
2009/11/07(土) 17:28:030566デフォルトの名無しさん
2009/11/07(土) 17:30:07Workbooks(“ブック名.xls”).Worksheets(“シート名”).Activate
これをやっても、インデックスが有効範囲にありませんが出ます。
どなたかお願いします。
0567デフォルトの名無しさん
2009/11/07(土) 18:13:11やりたいことは、2つの異なるブックのフォームの列データーを他のブックの列データーと比較をしたいのです。
0568デフォルトの名無しさん
2009/11/07(土) 20:06:01つマクロの記録
0569デフォルトの名無しさん
2009/11/08(日) 00:28:16指定したセルに抽出し、複数ある場合はそのしたに並べて抽出するようなプログラムを作りたいのですが、
どのようにしたらよいでしょうか?
Excel2003です
0570デフォルトの名無しさん
2009/11/08(日) 00:32:480571デフォルトの名無しさん
2009/11/08(日) 09:22:15こんなとこで聞くよりgoogleで「VBA RSS」で検索すれば
よっぽど早く結果に到達できますよ。その上でわからないことを
質問したほうが効率的では?
0572デフォルトの名無しさん
2009/11/08(日) 09:57:39import sys, os
import win32com.client
def main(from_s, from_e, to, rng):
if from_s[1] != from_e[1]:
print 'error'
return
if rng[0] > rng[1]:
print 'error'
return
pwd = os.path.abspath(os.curdir)
xls = win32com.client.Dispatch('Excel.Application')
try:
wb = xls.Workbooks.Open(os.path.join(pwd, 'test1.xls'))
sheet = wb.Sheets(1)
c = 0
for row in range(65535):
if row >= from_s[0] and row <= from_e[0]:
v = float(str(sheet.cells(row, from_s[1])))
if v >= rng[0] and v <= rng[1]:
sheet.cells(to[0] + c, to[1]).value = v
c += 1
wb.SaveAs(os.path.join(pwd, 'testout.xls'))
wb.Close()
except:
print sys.exc_info()
finally:
xls.Quit()
if __name__ == '__main__':
main((10, 2), (20, 2), (3, 5), (99.0, 1000.0)) # B10-B20 -> E3-
0573デフォルトの名無しさん
2009/11/08(日) 10:00:45import sys, os
import win32com.client
def main(from_s, from_e, to, rng):
if from_s[1] != from_e[1]:
print 'error'
return
if rng[0] > rng[1]:
print 'error'
return
pwd = os.path.abspath(os.curdir)
xls = win32com.client.Dispatch('Excel.Application')
try:
wb = xls.Workbooks.Open(os.path.join(pwd, 'test1.xls'))
sheet = wb.Sheets(1)
c = 0
for row in range(65535):
if row >= from_s[0] and row <= from_e[0]:
v = float(str(sheet.cells(row, from_s[1])))
if v >= rng[0] and v <= rng[1]:
sheet.cells(to[0] + c, to[1]).value = v
c += 1
wb.SaveAs(os.path.join(pwd, 'testout.xls'))
wb.Close()
except:
print sys.exc_info()
finally:
xls.Quit()
if __name__ == '__main__':
main((10, 2), (20, 2), (3, 5), (99.0, 1000.0)) # B10-B20 -> E3-
0574デフォルトの名無しさん
2009/11/08(日) 10:44:08ワークシートイベントで処理を抜け出すのはどうすれば・・
一度だけ計算させたいんですが。どこかで見た気がするのに探せない。
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count > 1 Then Exit Sub
If Target.Column = 1 Then
Target.Value = Target.Value + 1
'この後どうすれば・・・・
End If
End Sub
0575デフォルトの名無しさん
2009/11/08(日) 11:14:38どっかのセルに実行済みをセットすれば?
0576デフォルトの名無しさん
2009/11/08(日) 12:57:57Application.EnableEventsを使うが、実用になるChangeイベントを書くのはかなり難しいよ。
あきらめた方がいいと思うな。
真っ先に考えられる不具合は消した場合でも1になったりすることだな。
問題はこれだけじゃないからかなり難解。
0577デフォルトの名無しさん
2009/11/08(日) 13:35:30どもです。そもそも無茶なことか・・・
初心者ゆえに「出来る・出来ない」が良くわからない
ありがとでした
0578デフォルトの名無しさん
2009/11/08(日) 14:05:320579デフォルトの名無しさん
2009/11/08(日) 17:28:43その10秒の間に、フォーム内のTextboxの値を
ユーザーの任意で変更できるようにと考えましたが、
タイマーしてる間、フォームが白く固まって値変更ができません。
何か改善策はありますでしょうか。2003です。
Private Sub UserForm_Activate()
Dim MyWaitTime As Date
'10秒後に閉じる場合
MyWaitTime = TimeSerial(Hour(Now()), Minute(Now()), _
Second(Now()) + 10)
Application.Wait MyWaitTime 'マクロを指定の時間まで停止
Unload.対象日数の入力フォーム 'UserFormを閉じる
End Sub
0580デフォルトの名無しさん
2009/11/08(日) 17:44:470581デフォルトの名無しさん
2009/11/08(日) 17:45:47整数値は除算や剰余算を用いてバイト型配列に代入して出力しているのですが、
浮動小数値(単精度)をバイト型配列に含める場合にどう処理すればいいのか分からず困っています。
良い解決策をご教授頂ければ助かります。
0582デフォルトの名無しさん
2009/11/08(日) 18:10:19ttp://www.hi-ho.ne.jp/babaq/bstr.html
ttp://piza.2ch.net/log/prog/kako/947/947909317.html
http://support.microsoft.com/kb/167668/en-us/
0583デフォルトの名無しさん
2009/11/08(日) 22:34:13配列に入れる理由がファィル出力のためだけなら、いちいち配列など使わずに
ファイルをBynaryモードで開いて整数も実数もそのまま出力してしまえばいい。
ただし、実数の内部表現が異なる場合は使えない。
どうしてもVBAの中で1バイトずつ取り出す必要があるなら、
Win32APIのMoveMemoryを使うぐらいしか方法がない。
0584デフォルトの名無しさん
2009/11/09(月) 20:42:51ストリーム位置を取得する方法を教えてください。
(Cのftell()相当の操作)
0585584
2009/11/09(月) 21:06:44Seek( ファイル番号 ) で取得できました。
0586デフォルトの名無しさん
2009/11/10(火) 15:17:54Dim lastRow As Long
Dim ReturnBook As Workbook, TargetBook As Workbook
Set ReturnBook = ActiveWorkbook
Application.ScreenUpdating = False
Set TargetBook = Workbooks.Open("D:\test\sample.xls")
With TargetBook.Sheets("Sheet1")
' ListBox1.ColumnHeads = True
Me.ListBox1.List = .Range(.Range("B2"), .Cells(.Rows.Count, 2).End(xlUp)).Resize(, 2).Value
ReturnBook.Activate
Application.ScreenUpdating = True
TargetBook.Close
End With
End Sub
削除区分 コード 商品名
0 1001 りんご
1 1002 みかん
0 1003 バナナ
こういう風な外部ブックに対して削除区分が1のデータをリストボックスに
表示しないようにするにはどうすればいいですか?教えてください
0587デフォルトの名無しさん
2009/11/10(火) 23:44:43会社の仕事でマクロを組むのはズル? 事務作業の効率化に意見さまざま
0588デフォルトの名無しさん
2009/11/10(火) 23:48:02他人が作ったマクロを勝手に使って
仕事を早く終わらせるのはズルだと思う
少しはリスペクトなりインセンティブなり気を使えと
0589デフォルトの名無しさん
2009/11/11(水) 15:13:140590デフォルトの名無しさん
2009/11/11(水) 15:25:270591デフォルトの名無しさん
2009/11/11(水) 22:10:44そのシート1の貼りつけた図のコピーを切り取るマクロを組むと、ピクチャー番号が異なるために、できません。どうすれば、解決できますか?
0592デフォルトの名無しさん
2009/11/11(水) 22:21:57(実現可能性だけ教えて頂ければ、自力でどうにかしたいと思います)
・処理内容
Outlook2007で、
特定の件名がついたメールは、メール内容表示の際にボタンを出現させて、
ボタンを押すことでExcel2007にメールの内容を転記させる。
例えば、以下のような感じです。
■Outlook
件名:○○見積書
メール内容:
○○費 \50000
△△費 \100000
―――-
|ボタン|←ポチっとな
―――-
■Excel
A1セル:○○費
A2セル:\50000
B1セル:△△費
B2セル:\100000
が転記される
0593デフォルトの名無しさん
2009/11/12(木) 00:23:580594デフォルトの名無しさん
2009/11/12(木) 00:28:37Sub 四角形2()
Dim MyShape As Shape
Set MyShape = ActiveSheet.Shapes.AddShape(msoShapeRectangle, 40, 425, 355, 90)
With ActiveSheet.Shapes.Range(MyShape.Name)
.Fill.Visible = msoTrue
.Fill.Solid
.Fill.ForeColor.SchemeColor = 10
.Fill.Transparency = 0.5
End With
End Sub
しかし実際にはWith内で指定したパラメータは常に共通で
位置と大きさのみ違う複数のケースでの長方形を作りたいのです。
With〜End WihtをPrivateFunctionに書いて、MyShapeの値を変えて参照させれば良いですか?
あと自分で書いておいてなんですが(MyShape.Name)は何を表すんでしょう?
0595デフォルトの名無しさん
2009/11/12(木) 19:57:22あるフォルダに入っているテキスト形式のデータ10個を
エクセルで開いていくVBAのプログロムを書いている
のですが、エラー文で「データ_i.txtがありません」と表示されます。
私の書いたプログラムは下記です。
Sub テスト()
テスト Macro
Dim i As Integer
For i = 0 To 5
ChDir "C:\Documents and Settings\データ"
Workbooks.OpenText Filename:= _
"C:\Documents and Settings\データ\_i.txt" _
, Origin:=932, StartRow:=1, DataType:=xlDelimited, TextQualifier:= _
xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, Semicolon:=False, _
Comma:=False, Space:=False, Other:=False, FieldInfo:=Array(1, 1), _
TrailingMinusNumbers:=True
Next i
End Sub
このプログラムの目的は、テキストデータの入っているフォルダを
他の名前に変更したときも、その中に入っているテキストデータ10個を
エクセルで展開するためです。おそらく
"C:\Documents and Settings\データ\_i.txt"のiの部分が間違えていると
思うのですが、どうすればいいでしょうか?よろしくお願いします。
0596デフォルトの名無しさん
2009/11/12(木) 20:10:080597デフォルトの名無しさん
2009/11/12(木) 20:32:33としてやらんといかんのとちゃうかな
0598デフォルトの名無しさん
2009/11/12(木) 20:34:03データさんか?
普通はそこにアカウント名が入るんだが。
まさかとは思うがi.txtのiって・・・w
0599デフォルトの名無しさん
2009/11/12(木) 21:00:42>>他の名前に変更したときも、その中に入っているテキストデータ10個を
>>エクセルで展開するためです。
(・ω・`)???
0600595
2009/11/12(木) 21:12:37説明不足ですみません。
質問ではテキストデータと書きましたが、.datで保存されています。
フォルダの中に「_0.dat」「_1.dat」「_2.dat」…というデータが10個あります。
ほんとは10個開きたいのですが、とりあえず5個開けたら5を10に直せばいいかなと
思ってます。
>>597さん
\データ\_"&i&".dat"としましたが、コンパイルエラーになります。
dat形式のデータは無理なのでしょうか?
0601デフォルトの名無しさん
2009/11/12(木) 21:18:41死ね >>600
0602デフォルトの名無しさん
2009/11/12(木) 23:40:30スペルミスとかスペース抜けとかで質問されても困る
0603デフォルトの名無しさん
2009/11/12(木) 23:56:231をfor文使って
1〜100までするにはどうすればいいでしょうか?
For n = 1 To 100
Range("D&n&").Select
だとエラーになります
0604デフォルトの名無しさん
2009/11/12(木) 23:59:00Range("G1").Select ×
Range("D1").Select ○
0605デフォルトの名無しさん
2009/11/13(金) 00:00:00あるいは
Cells(n, 4).Select
0606デフォルトの名無しさん
2009/11/13(金) 00:06:08根本的に・・・
0607デフォルトの名無しさん
2009/11/13(金) 00:09:35R[+&n]を引数にする場合はどうでしょうか?
0608デフォルトの名無しさん
2009/11/13(金) 00:49:120609デフォルトの名無しさん
2009/11/13(金) 00:53:26ActiveCell.FormulaR1C1 = "=-R["&n&"]C[-2]-R[-4]C[-2]"
とかやってみたんですがダメでした
0610デフォルトの名無しさん
2009/11/13(金) 01:02:20もっと回答したくなるように質問しろ
0611デフォルトの名無しさん
2009/11/13(金) 01:03:42AddShapeの引数を変数にして全体をループさせるだけでいいのでは?
共通パラメータをわざわざ関数にする必要はないと思う。
>あと自分で書いておいてなんですが(MyShape.Name)は何を表すんでしょう?
ShapesのRangeプロパティは、指定したShapeのオブジェクトを返す。
この"指定した"というのが今回の場合はMyShape.Nameとなる。
正直わかりにくいし、Rangeなんて使った事無い。
With ActiveSheet.Shapes(MyShape.Name)
もしくは
With MyShape
このどちらかが一般的だと思ってるがどうだろうか。
>>607
>>595と>>603に続いて同じ失敗をしている。
>>597を参考にして考えればわかる。
0612デフォルトの名無しさん
2009/11/13(金) 10:51:530613デフォルトの名無しさん
2009/11/13(金) 10:57:300614デフォルトの名無しさん
2009/11/13(金) 14:43:25vbaでie制御して、ieのframes(a)内を全選択してコピーしたい。
frames(a)を全選択することが重要で、frames(b)の情報は必要ないし、innerText等での情報取得は避けたい。
ExecWBでやってみたけど上手く行かなかった。
SendKeysもいまいちだったし、出来るならやりたくない(違う作業が出来なくなるため)
やり方に問題があるのか、違う方法があるのか?
教えてください。
0615デフォルトの名無しさん
2009/11/13(金) 18:44:29人前に姿をさらすのも苦痛になるものだが、そういうときの行動こそ、人間の大きさが見えるものかもしれない。
米シカゴに住む34歳のティアン・ハリスさんは、 10月31日に幸せな花嫁となる予定が、6日前になって相手の
男性から突然結婚の中止を告げられてしまった。式直前でのまさかの事態だが、さらなる追い打ちを
かけられてしまう。慌てて母親と一緒にパーティー会場にキャンセルを申し出ると、もう返金は不可能と
言われたそう。駐車場に座り込み落ち込むハリスさんと、なす術もなく見守る母親。そのとき、向かいに
あった老人ホームを目にして良いことを思いついた。
どうせ無駄にするならと、2人は向かいの老人ホームの人たちとパーティーを開こうと決断する。
「寄付をしたい」とハリスさんが飛び込んだ老人ホームの施設長は、「彼女はここにいる誰も知らないだろうし、
そんなオファーも受けたことない」(米紙ニューヨーク・デイリーニュースより)と驚いた。かくして、ハリスさんの結婚パーティーは、
老人ホームのハロウィンパーティーへと変更。お年寄りたちも、思いもよらぬイベントを大いに喜んだという。
300人近いお年寄りは思い思いに仮装して、ダンスに興じた。あるお年寄りは「とても楽しい時間だった」
(米放送局CBSより)と語り、老人ホームに素敵なひとときをもたらしたハリスさんに感謝している。施設長も
「彼女はどこからともなくやってきて、私たちに美しいパーティーを与えてくれた天使」とハリスさんを讃えた。
会場の傍らでお年寄りの笑顔を見て満足したというハリスさんだが、本当なら自分が主役になるはず
だったパーティーにやはり心境は複雑だったよう。母親も「会場で、皆さんの前にいるのが娘だったら
よかった」と無念さを語り、施設長も「彼女は落ち込んでいたと思う」とハリスさんの心中を慮った。
しかし、そうした中でもお年寄りたちに幸せな時間を与えたハリスさんの人柄に、施設長は「神は彼女を祝福し、
きっとほかに良い人を見つけられる」と太鼓判を押す。
ハリスさんは11月2日に、新婚旅行となるはずだったハワイへ1人で旅立ったそう。花嫁になり損ねてしまった
ハリスさんだが、彼女が取った決断が多くの人に幸せを与えただけでなく、少なからず自分への励みに
なったことを願いたい。(抜粋)
http://www.narinari.com/Nd/20091112560.html
0616デフォルトの名無しさん
2009/11/13(金) 18:49:150617デフォルトの名無しさん
2009/11/13(金) 19:33:0410ページある文書のうち、例えば2、5、7ページだけを印刷したい場合、
Sub 印刷()
Worksheets("文書").PrintOut from:=2, to:=2
Worksheets("文書").PrintOut from:=5, to:=5
Worksheets("文書").PrintOut from:=7, to:=7
End Sub
と、やるのでしょうか?
なにかもっと良い方法がありそうな・・・
OSはVISTA、バージョンは2007です。
0618デフォルトの名無しさん
2009/11/13(金) 21:27:48Worksheets("文書").PrintOut pages:=2,5,7
End Sub
0619あ
2009/11/13(金) 22:01:06A1からA100に1から10の数字を入力するマクロを作成
していますが、無限ループになってしまいます。。
どのようにすればよろしいでしょうか?
Sub Ary()
Dim Arow As Long
Dim i As Long
For i = 1 To 600
Cells(i, 1).Value = i
If i = 10 Then
i = 1
End If
Next i
End Sub
0620デフォルトの名無しさん
2009/11/13(金) 22:26:21個人的には
>For i = 1 To 600
に突っ込みたいが、まじめに答えるとi=10の時にi=1にしろって指示してるので
i=1 → 10 → 1 → 10 → の無限ループになってる
1,2,・・・10,1,2,・・・ と繰り返したいなら cells(i,1)=i%10 みたいに余りを計算すれば良い
(余りの計算は %じゃなくてmodとかかも知れない。忘れた)
0621デフォルトの名無しさん
2009/11/13(金) 22:27:5210で割って余りだと0,1,2,・・・,9,0,1,・・・ってなるから1足せ
0622デフォルトの名無しさん
2009/11/13(金) 22:57:12カウンタ変数(i)をForループの中で書き換えるのは可能な限り避けた方がイイ
何回回ったかわかんなくなっちゃうよ
0623デフォルトの名無しさん
2009/11/14(土) 00:02:36http://namidame.2ch.net/test/read.cgi/hidari/1257990721/
0624デフォルトの名無しさん
2009/11/14(土) 00:51:45Dim Arow As Longに突っ込めよ
0625デフォルトの名無しさん
2009/11/14(土) 04:51:06mi、c は変数です。
何がいけないのでしょうか?
0626デフォルトの名無しさん
2009/11/14(土) 05:13:520627デフォルトの名無しさん
2009/11/14(土) 07:43:48じゃダメなの?
変数が文字列の中に含まれちゃってるよ。
ただのmiって文字列としか認識されない。
0628デフォルトの名無しさん
2009/11/14(土) 08:59:38Sub Ary()
Dim Arow As Long
Dim i As Long
Dim j As Integer
j = 1
For i = 1 To 600
Cells(i, 1).Value = j
j = j + 1
If j > 10 Then
j = 1
End If
Next i
End Sub
こんなものでどないでしょう。
0629デフォルトの名無しさん
2009/11/14(土) 09:49:320630デフォルトの名無しさん
2009/11/14(土) 10:04:030631デフォルトの名無しさん
2009/11/14(土) 10:12:070632デフォルトの名無しさん
2009/11/14(土) 10:15:190633デフォルトの名無しさん
2009/11/14(土) 10:49:33Sub Ary()
Dim Arow As Long
Dim r As Range
For Each r In Range("A1:A100")
r.Value = r.Row Mod 10
Next r
End Sub
こんなものでどないでしょう。
0634デフォルトの名無しさん
2009/11/14(土) 10:50:5810で割って余りだと0,1,2,・・・,9,0,1,・・・ってなるから1足せ
0635デフォルトの名無しさん
2009/11/14(土) 11:01:07のようにRCの中に変数を入れたい場合はどうすればいいのでしょうか?
アドバイスお願いします
0636デフォルトの名無しさん
2009/11/14(土) 11:07:030637デフォルトの名無しさん
2009/11/15(日) 01:17:24Public Seikai As Integer, i As Integer, Ruiseki As Integer
Sub Quiz()
Dim Det As String
i = 1
Ruiseki = 0
Do
Det = Sheets("Sheet3").Cells(i, 1)
If Det = "" Then Exit Do
UserForm1.Show
i = i + 1
Loop While Det <> ""
UserForm2.Show
'MsgBox "正解は" & Ruiseki & "問です。"
End Sub
sheet3のA列に問題番号、B列に問題、C列に正解番号を入れています。
問題は50問作ったのですが、この中から20問をランダムに表示する
ようにしたいのですが、どのようにしたらいいかわかりません。
今は、50問全て順番に表示されてしまう状態です。
教えてください。
よろしくお願いします。
0638デフォルトの名無しさん
2009/11/15(日) 01:45:550639デフォルトの名無しさん
2009/11/15(日) 13:25:55ありがとうございます!
助かりました。
0640637です
2009/11/16(月) 00:26:37マクロを具体的にどう変更したらいいかおしえてください…
0641デフォルトの名無しさん
2009/11/16(月) 08:16:40例えば、D列に乱数で適当な数字を振る
D列を見て数の大きい順に20問を出題する
そこまで自分で作ったのなら、これくらいできるだろ?
宿題なら自分でどうぞ
0642デフォルトの名無しさん
2009/11/16(月) 11:18:19A
B
C
D
こうあったとして、全てのマクロを実行するマクロを作るにはどうやったらいいですか?
0643デフォルトの名無しさん
2009/11/16(月) 11:26:370644デフォルトの名無しさん
2009/11/16(月) 16:52:03A
B
C
D
End SUb
wwww
0645デフォルトの名無しさん
2009/11/16(月) 20:20:05言語仕様がコンパクトにまとまってるような本はないでしょうか?
VBAの仕様なんてたかが知れてるかもしれませんが、分厚い本やWEBサイトをいったりきたりするのは面倒だし
言語に自分の知らない部分があるというのが気持ち悪い性分なので、まとまってる本を探しています(WEBでもいいのですが)
・プログラミングの知識前提で、
・ペラッペラの単色刷りで
・言語使用だけは満足してる
オライリーのクイックリファレンスのVBA版みたいなのが理想です(探したけどなかった)。
VBAの解説本だとプログラミング未経験者向けの、カラフルで妙に分厚い本が多いような気がするのですが
私としてはクイックリファレンス的な本が理想なので…
お勧めの本などあれば教えてください。
0646デフォルトの名無しさん
2009/11/16(月) 22:17:540647デフォルトの名無しさん
2009/11/16(月) 22:23:14マジレスだけどリファレンスとしてはオンラインヘルプ一択
結局ヘルプ以上にならないから初心者向けの分厚いカラー刷りになる
紙がよければ死ぬ気で全部印刷
0648637です
2009/11/17(火) 00:26:19RAND()で、
B列とC列のくみあわせは変わってしまうことは無いのですか?
0649デフォルトの名無しさん
2009/11/17(火) 00:28:24ここはマ板ですよ?
0650637です
2009/11/17(火) 00:38:30死ねクズ
0651デフォルトの名無しさん
2009/11/17(火) 00:39:17おまえの前にある箱の向こうにも人がいるんだぜ
>>638 も >>641 も的確な回答してるじゃん
それに対して、あーじゃない、こーじゃない、って・・・
更に質問するんだったら
ありがとう御座います。ヒントを基に組んでみたら、こんな動作をしました。
ここが怪しいと思うので、調べたり試行錯誤したのですが、こんなエラーが出てしまいます。
何かアドバイス頂けないでしょうか?
くらい書いたほうがいんでね?
なんとなくムカつく文章だったので勢いで書いた
0652デフォルトの名無しさん
2009/11/17(火) 00:56:420653デフォルトの名無しさん
2009/11/17(火) 01:01:43的確だと思うぞ。
0654デフォルトの名無しさん
2009/11/17(火) 08:15:19俺も的確だと思うけどな。
質問する側のレベルが低いんだろw
0655デフォルトの名無しさん
2009/11/17(火) 08:40:16http://www.nicovideo.jp/watch/sm8517855
0656デフォルトの名無しさん
2009/11/17(火) 09:03:50http://tsushima.2ch.net/test/read.cgi/newsplus/1258414484/
0657デフォルトの名無しさん
2009/11/17(火) 11:57:24B列に年齢を出したいときは、どういう計算をすれば軽くなるでしょうか?
古いPC(win95)なのでものすごく時間がかかっています
他のマクロでも応用したいので、教えてください
お願いします!
0658デフォルトの名無しさん
2009/11/17(火) 17:49:46=DATEDIF(A2,TODAY(),"y")
で済むと思うけど、どうしてもVBA上から使いたいならworksheetfunctionを付ければ?
0659デフォルトの名無しさん
2009/11/17(火) 19:25:58VBAにて
Range("B2").Value = DateDiff("yyyy", Range("A2").Value, Now)
を必要行だけ繰り返す
0660デフォルトの名無しさん
2009/11/17(火) 19:54:25単純に考えればいいってことがわかった気がする
どうも
0661デフォルトの名無しさん
2009/11/17(火) 22:22:18他のファイルとかに書いてあるのを呼ぶときはスコープが問題になることがあるから気をつけてね
Public宣言付けたり、参照設定したりとか
0662デフォルトの名無しさん
2009/11/18(水) 09:58:30例えばセルA1に何か文字列が入っている状態で
セルA2に以下のシート関数が入っているとします。
=IF(A1="","",HYPERLINK("http://www.yahoo.co.jp/","Yahoo"))
そうすると、セルA2には"Yahoo"の文字列が表示され
"http://www.yahoo.co.jp/"へのリンクが張られている状態です。
ここで、VBAにより、リンク先である"http://www.yahoo.co.jp/"の文字列を
取得する方法はあるのでしょうか?
セルA2に設定されている関数の文字列を解析するという手もあるとは思いますが、
それ以外で方法はあるのでしょうか?
0663デフォルトの名無しさん
2009/11/18(水) 14:09:250664デフォルトの名無しさん
2009/11/18(水) 14:14:34とてつもなく軽くなりました、ありがとうございました!
0665デフォルトの名無しさん
2009/11/18(水) 16:45:42>>658の数式でも軽くなったの?
もし重かったら揮発性関数のTODAY()のせいだな。
どこかのセル、たとえばF1にCtrl + ;で今日の日付を求めて
=DATEDIF(A2,$F$1,"Y")とすれば数式でも軽くなるかもよ。
0666デフォルトの名無しさん
2009/11/18(水) 22:41:02それぞれのA1セルに日付をいれてます
この1ヶ月分のシートの月曜日と火曜日だけを対象してなんらかの処理を行いたいときはどのような方法を取ればいいでしょう?
よろしくお願いします
0667デフォルトの名無しさん
2009/11/18(水) 23:30:021日の場合は前月の2日から一か月分って言う意味?
0668デフォルトの名無しさん
2009/11/18(水) 23:32:15for each collectionでシートに対してループ回して
その中でA1セルを調べて、曜日をチェック
で、なんらかの処理を行えばOK
0670デフォルトの名無しさん
2009/11/19(木) 09:19:430671デフォルトの名無しさん
2009/11/19(木) 09:24:37http://pc12.2ch.net/test/read.cgi/tech/1243095768/
http://pc12.2ch.net/test/read.cgi/tech/1168427595/
http://pc12.2ch.net/test/read.cgi/tech/1242136180/
0672デフォルトの名無しさん
2009/11/19(木) 11:42:02検索しにくいっす・・
0673デフォルトの名無しさん
2009/11/19(木) 19:46:280674デフォルトの名無しさん
2009/11/19(木) 20:13:37年賀状宛名流し込み印刷かな
0675デフォルトの名無しさん
2009/11/19(木) 20:27:200676デフォルトの名無しさん
2009/11/19(木) 21:46:410677デフォルトの名無しさん
2009/11/19(木) 21:49:26ここから特定の曜日(火曜日と日曜日など)を区別して処理をおこないたいのですが
どのような方法を取ればよいのかご教授ねがいます
0678デフォルトの名無しさん
2009/11/19(木) 22:10:09おまえ666だろ
曜日を調べる関数を使う
関数名は自分で調べろ
以上
0679デフォルトの名無しさん
2009/11/19(木) 22:43:031/1と入力して表示形式をm月d日(aaa)にするだけだ。
0680デフォルトの名無しさん
2009/11/20(金) 05:56:15教えてえろい人
エクセルのVBAを使って、Outlookメールを複数の人に自動送信操作をさせたいです。
Aさん(○○○@○○.co.jp)にエクセルSheet1に記載された内容を送信し、
Bさん([email protected])にエクセルSheet2に記載された内容を送信します。
後、CさんにエクセルSheet3を・・・という具合に・・・
以上の事が、エクセルVBAを使って1回だけマクロを走らせるだけで、できるでしょうか?
0681デフォルトの名無しさん
2009/11/20(金) 07:34:40listviewで縦横のスクロールバーのやり方が分からないのですが
どうすればうまくいくでしょうか?
0682デフォルトの名無しさん
2009/11/20(金) 11:22:46できるでしょうね
0683デフォルトの名無しさん
2009/11/20(金) 11:48:160684デフォルトの名無しさん
2009/11/20(金) 21:52:10ExcelのよりOutlookのVBA使ったらどうよ?
0685デフォルトの名無しさん
2009/11/20(金) 22:27:51「333 「111
111 ⇒ 333
555」 555」
3桁ずつ切り分けて別セルに出力、ソートをかけて並べかえるというものは
出来たのですが、出来ればマクロの中だけで処理をしたいんです。
0686デフォルトの名無しさん
2009/11/20(金) 23:13:54安直だけど、例えばセルA1を対象とするならこんな感じ
Sub Macro1()
a = Split(Range("A1").Value, Chr(10))
For i = 0 To UBound(a) - 1
For j = i + 1 To UBound(a)
If a(i) > a(j) Then
tmp = a(i)
a(i) = a(j)
a(j) = tmp
End If
Next j
Next i
Range("A1").Value = Join(a, Chr(10))
End Sub
0687デフォルトの名無しさん
2009/11/20(金) 23:17:11質問をさせてください。
正規表現でのマッチパターンを用いて、
文字列をSplitして配列に入れたいと考えています。
以前javaで行った時は問題無く出来たのですが、
VBAの場合には上手くパターンを認識してもらえません。
下のコードで行ったのですが、”スペース”or","の1回以上の繰り返しでSplitを目的としています。
Sub testVBA()
Dim Reg As Object
Dim regPattern As String
Dim reMatch As Object
Dim i As Integer
Dim STR As Variant
Set Reg = CreateObject("VBScript.RegExp")
Reg.Pattern = "[ ,]+"
STR = Split("moug MOUG,モーグ,,もーぐ", regPattern)
For i = 0 To UBound(STR)
Debug.Print (STR(i))
Next
End Sub
続きます。
0688デフォルトの名無しさん
2009/11/20(金) 23:17:20import java.util.regex.*;
public class testJava {
public static void main(String[] args) {
Pattern pattern = Pattern.compile("[ ,]+");
String[] strs = pattern.split("moug MOUG,モーグ,,もーぐ");
for (int i=0;i<strs.length;i++) {
System.out.println(strs[i]);
}
}
}
VBAで出来るのであればやり方を教えてくださいませ。
VBAでは対応していないと言う事でも構いません。
何卒よろしくお願いします。
0689デフォルトの名無しさん
2009/11/20(金) 23:18:42モーグで質問しようとして準備していた文書を張ってしまいました。
ちなみにマルチポストではありませんので、よろしくお願いします。
0690デフォルトの名無しさん
2009/11/21(土) 00:40:26VBAのSplitが正規表現を受付けないんじゃないの
s = "123 456 789"
ArySize = 0
Dim Ary()
Set re = CreateObject("VBScript.RegExp")
re.Pattern = "[ ,]+"
Do
ArySize = ArySize + 1
ReDim Preserve Ary(ArySize)
Set Matches = re.Execute(s)
If Matches.Count <> 0 Then
v = Left(s, Matches(0).FirstIndex)
s = Right(s, Len(s) - (Matches(0).FirstIndex + Matches(0).Length))
Else
v = s
End If
Ary(ArySize - 1) = v
MsgBox v
Loop While Matches.Count <> 0
MsgBox Join(Ary, "$")
0691687
2009/11/21(土) 08:37:43レスありがとうございました。
やはりVBSのオブジェクトですし、VBAのsplitが対応してないのは頷けます。
ソース例の提示、ありがとうございました。
自作関数で対応しようと思います。
重ね重ねありがとうございました。
0692デフォルトの名無しさん
2009/11/21(土) 10:02:39ブックに変更が有った時に保存するようにしたいのですが、変更が有ったか無かったかのチェックって
どうするのでしょうか?
保存するのはThiworkbookの閉じる時で
Private Sub Workbook_BeforeClose(Cancel As Boolean)
End Sub
の中に入れれば良いのでしょうけれど。
0693デフォルトの名無しさん
2009/11/21(土) 11:15:06If WorkBook.Saved = False Then
'保存処理
End If
0694デフォルトの名無しさん
2009/11/21(土) 11:21:38thxです!
0695デフォルトの名無しさん
2009/11/21(土) 12:50:52VBAでなくActiveXの問題かもしれませんが
VBAの編集中に起きた問題なのでコチラで。
先にActiveXのボタンを配置しVBAで記述したSub{}を実行するという簡単なものを複数作成していたのですが
5・6個作り終えいざ実行してみようとボタンを配置してあるワークシートを開こうとしたところ
ボタンは表示されずエラー(特定のエラー名表示されず)が起きExcelが強制終了してしまいます。
また新規作成でActiveXのボタンを新たに配置しようとしても同じ現象が起こりました。
アドインも複数導入している状態のためもしかするとVBAの可能性も捨てきれないのではと質問させて頂きました。
対処法・解決策はございますでしょうか?
宜しくお願いいたします。
0696デフォルトの名無しさん
2009/11/21(土) 13:18:23俺は何に原因がわかるかは知らないし、
ActiveXに関係ない話だが俺の話を聞いてくれ
Excel VBAでプログラム作ったんだよ。
クラスとかwitheventsとか使ってね。
そしたらなぜかExcelが強制終了するんだよw
いや、しないときもある。するときもある。
自分のマシンでは強制終了するのに、他のマシンでは動くとか
新しくExcel作ってソース全部移植したら直るんだよ。
でもしばらくするとまた強制終了するようになるんさよ。
原因さっぱりわかんねw
俺は思ったね。Excelで無理しちゃいけねぇ。
単純なマクロ程度で終わらせておくべきだって。
0697デフォルトの名無しさん
2009/11/21(土) 13:42:52起動時に強制終了するアドインでも作ったんじゃね?
0698デフォルトの名無しさん
2009/11/21(土) 14:51:42わかる
0700デフォルトの名無しさん
2009/11/21(土) 16:15:33http://www.jcp.or.jp/akahata/aik09/2009-11-14/2009111401_04_1.html
2chとパチンコ屋が無くなれば日本の景気は上向くかもな
0701デフォルトの名無しさん
2009/11/21(土) 18:55:37俺も似たような現象で悩んでいる。
アドイン複数入れて、VBAでプログラム作って2〜3回動かすのには問題ないんだが
しばらく使ってExcelを終了させると、
「問題が発生したため、Microsoft Office Excelを終了します。ご不便をおかけして申し訳ありません。」
とかいうふざけたエラーが出てくる。
俺の記憶が確かなら、
グローバル変数とか配列を大量に使いだした辺りでぶっ壊れた気がする。
メモリを開放しなきゃいけないとか、そういうことなのか???
0702デフォルトの名無しさん
2009/11/21(土) 19:05:460703デフォルトの名無しさん
2009/11/22(日) 00:08:50MSのサイトにoutlook使ったメール送信のサンプル見つかると思うから
それを参考にしたら?
Accessに取り込んだ内容を登録したメアドにoutlook使って送信するPG
を昔作ったことがあるから、出来るはずだよ
ウイルス対策用(だろうなぁ・・)で1通単位でダイアログ押という仕様の
回避用のexeも見つかると思うから探してくれい
0704デフォルトの名無しさん
2009/11/22(日) 14:29:02xp sp3
Sheet1のA1にSheet2を参照とした「=SUM(Sheet2!$A$2:Sheet2!$A$3)」を入れる為のマクロ、
Sub test()
Sheet1.Cells(1, 1).Formula = "=SUM(" & Sheet2.Cells(2, 1).Address & " : " & Sheet2.Cells(3, 1).Address & ")"
End Sub
ですと、Sheet1のA1には同一シートを参照とした「=SUM($A$2:$A$3)」となってしまいます。
"=SUM(" & Sheet2.Cells(2, 1).Address & " : " & Sheet2.Cells(3, 1).Address & ")"の部分を
"=SUM(Sheet2!$A$2:Sheet2!$A$3)"にすれば解決するのはわかっておりますが、
どうしてもcellsを使いたく質問させていただきました。
解決策がありましたら、宜しくお願いします。
0705デフォルトの名無しさん
2009/11/22(日) 14:39:40突っ込み所がいろいろと・・・
本題は数式のINDIRECTで解決しそうな気がするが?
0706デフォルトの名無しさん
2009/11/22(日) 14:51:06Sheet2.Cells(2, 1).Address
が何を返すかを考えればいいんじゃね?
Sheet2.Cells(2, 1).Addressって書き方をするのも珍しい.....
0707デフォルトの名無しさん
2009/11/22(日) 19:21:46javascriptとvbscriptを学ぼうと思いました。入門するために言語について探しているうちに、
下記のようなことがしてみたいと思ったのですが、出来るのかということと、
もっと適した言語があるのかをご存知であれば助言くださるとうれしいです。
過去の株価を利用したシミュレーションプログラム。
具体的には、データとして興味のある某銘柄の日柄(日別に始値、高値、安値、終値、出来高)
を10年分オープンオフィスの表計算calcにyahooファイナンスから入手しました。
例えば、このデータを使って特定の日にその株を1000株買い、以降10円上がれば売り、売り値から
10円下がればまた買い、その買値より10円下がれば買い増し(仮の現金残高がなくなるまで)し、
それぞれは買値より10円上がると売る。
持ち株がなくなると、高値から1割下がったところからまた始める。
というようなことを繰り返すと、いくらの利益でいくらの買値ので
どれぐらい持ち株になった状態かを結果としてだすものです。
javascriptやvbscriptでも出来るのでしょうか、それとももっと別のスクリプト
言語の方が適しているのでしょうか?
よろしくお願いします。。
0708デフォルトの名無しさん
2009/11/22(日) 20:19:540709デフォルトの名無しさん
2009/11/22(日) 20:45:53ようは売買システムのバックテストしたいんだろ
できるよ
というか言語で出来ることが制約されるケースは少ない
もちろん得意、不得意はあるけど
ってことで好きな言語使いな
そして、このスレ以外に逝け
0710デフォルトの名無しさん
2009/11/22(日) 20:56:01ExcelVBAがいいんじゃないか?
0711701
2009/11/22(日) 20:57:29MSのバグかよ。
データはエクセルから取得して、処理は他(とりあえずDelphiを考えている)でやって、
結果をまたエクセルに返すかな・・めんどくさ・・
0712デフォルトの名無しさん
2009/11/22(日) 21:10:43MSのバグ扱いかよw
0714デフォルトの名無しさん
2009/11/22(日) 22:12:12そう考えたら、世の中で起きるバグの50%はMSのバグと云っても過言ではない。
0715デフォルトの名無しさん
2009/11/22(日) 22:31:13だがオレのPCのバグは99%オレのバグと言っても過言ではない
何度PCや開発ソフトのせいにして、その後取り下げたことか・・・
0716デフォルトの名無しさん
2009/11/22(日) 22:41:02wwwww
0717デフォルトの名無しさん
2009/11/22(日) 23:50:32まぁ、シンタックスエラーなら仕方ないな。
0718デフォルトの名無しさん
2009/11/23(月) 10:52:45お前らwwwww
今更だけどツボったwwwww
そういうセンスがいるんだなコーディングって俺まだまだだわ。
0719デフォルトの名無しさん
2009/11/23(月) 11:34:4415マソぐらいとちょっと高いけど、検証くんなどソフトもあるぞ
0720デフォルトの名無しさん
2009/11/23(月) 15:05:25こんにちは
For Nextを使い、
セルE5、E6、E7へそれぞれ「H線」「L線」「中心線」という文字を入れたいのですがどうすればよろしいでしょうか?
For i = 1 to 3
Cells(5,i + 4) = ?
next i
0721デフォルトの名無しさん
2009/11/23(月) 15:30:19For i = 1 To 3
Cells(5, i + 4) = x(i - 1)
Next i
初心者の発想はこんな感じ。
0723デフォルトの名無しさん
2009/11/23(月) 16:22:360724デフォルトの名無しさん
2009/11/23(月) 16:31:36For-Next使う必要ないじゃん
For i = 1 To 3
Next i
Range("E5").Value = "H線"
Range("E6").Value = "L線"
Range("E7").Value = "中心線"
0725デフォルトの名無しさん
2009/11/23(月) 17:07:02配列無しで出来る?
俺には思いつかなかった
0726デフォルトの名無しさん
2009/11/23(月) 17:21:26あれは配列のお勉強だったんじゃね?
0727デフォルトの名無しさん
2009/11/23(月) 17:32:17Cells(5,i + 4) = Iif(i=1,"H線",Iif(i=2,"L線","中心線"))
next i
配列思いつかなくてもできるじゃん不気味で自分はこんなの書きたくないけど。
0728デフォルトの名無しさん
2009/11/23(月) 18:01:590729デフォルトの名無しさん
2009/11/23(月) 19:07:59For i = 1 To 3
Cells(5, i + 4) = Choose(i, "H線", "L線", "中心線")
Next i
0730デフォルトの名無しさん
2009/11/23(月) 19:14:19For i = 1 To 3
Cells(5, i + 4) = x(i - 1) &"線"
Next i
0731デフォルトの名無しさん
2009/11/23(月) 19:17:410732デフォルトの名無しさん
2009/11/23(月) 19:29:470733デフォルトの名無しさん
2009/11/23(月) 20:05:46ReDim y(1 to 1 , 1 to 3 )
For i = 1 To 3
y(1 , i)=x(i - 1) &"線"
Next i
Range("E5:E7")=y
もしもしからなので動くかどうかはしらね
0734デフォルトの名無しさん
2009/11/23(月) 21:37:37お前>>718だろ?w
0735デフォルトの名無しさん
2009/11/23(月) 21:44:02>>529流に書くとこうだな。
For i = 1 To 3
Next
Range("E6:E8").Value=WorksheetFunction.Transpose(Split("H線 L線 中心線"))
下が普通だが。
For i = 1 To 3
Next
Range("E6:E8").Value=WorksheetFunction.Transpose(Array("H線","L線","中心線"))
0736デフォルトの名無しさん
2009/11/23(月) 21:53:080737デフォルトの名無しさん
2009/11/23(月) 21:58:09x = Array("H線", "L線", "中心線")
For i = 1 To 3
Range("E5").Cells(1, i).Value = x(i - 1)
Next i
0738デフォルトの名無しさん
2009/11/23(月) 22:02:05俺も知らんかったわ。
0739デフォルトの名無しさん
2009/11/23(月) 22:11:420740デフォルトの名無しさん
2009/11/23(月) 22:25:43Next i
Range("E6:E8").Value = [{"H線";"L線";"中心線"}]
0741デフォルトの名無しさん
2009/11/23(月) 22:28:060742デフォルトの名無しさん
2009/11/23(月) 22:28:09Do
Loop
Exit Sub
0743デフォルトの名無しさん
2009/11/23(月) 22:33:23何もなくても行数を稼ぐのが昔はプロの技と言われたもんだぜ
0744デフォルトの名無しさん
2009/11/23(月) 22:35:060745デフォルトの名無しさん
2009/11/23(月) 22:43:56無限ループって怖くね?
http://pc11.2ch.net/test/read.cgi/prog/1140435913/
0746デフォルトの名無しさん
2009/11/24(火) 00:22:51Loop1:
If i > 3 Then GoTo Loop1_End
Select Case i
Case 1: Cells(5, 5).Value = "H線"
Case 2: Cells(5, 6).Value = "L線"
Case 3: Cells(5, 7).Value = "中心線"
End Select
i = i + 1
GoTo Loop1
Loop1_End:
0747デフォルトの名無しさん
2009/11/26(木) 14:22:47http://www.slideshare.net/arrrrcamp/ruby-19-and-rails-30
0748デフォルトの名無しさん
2009/11/26(木) 15:55:58ずーっと萌え続けるからいいんじゃね
0749デフォルトの名無しさん
2009/11/26(木) 17:09:500750デフォルトの名無しさん
2009/11/26(木) 17:39:38これからブイバ初めても間に合いますか?
プログライミングをでけるようになりたいから
手始めにVBAから勉強するのか迷い中です。
何か時代は.NETでブイビーも.NET
それじゃ〜ブイバももう手遅れなんでしょうか?
0751デフォルトの名無しさん
2009/11/26(木) 17:47:16パイソンって強そうな名前ですが、本当につおいのですか?
でもちょっとHでもありますが。。
0752デフォルトの名無しさん
2009/11/26(木) 18:39:28暇人
0753デフォルトの名無しさん
2009/11/26(木) 19:17:14プログラミング云々以前に日本語を正しく書けるようにしろよ
「プログライミング」とか「ブイバ」とかさ、、、w
それに間に合うとか間に合わないかとかの問題じゃないと思うよ。
Excelでやらせたい事があるんだったらVBAだろうし。
0754デフォルトの名無しさん
2009/11/26(木) 20:41:09あっプログラミングの間違い、頭ではプログラミングつって
書いた覚えなんだけんど。
そんでブイバって読むんとちゃうんかいな。長いでど
ブイビーエーとでも言うんですか?
田舎もので素人だもんで、そげんこつも誰も教えてくれんから、
愛嬌ということで。。
0755デフォルトの名無しさん
2009/11/26(木) 20:49:00ID強制になるだけで静かになるよ
973 デフォルトの名無しさん [] Date:2009/11/23(月) 18:02:02 ID: Be:
その変更はキミに任せるから提案してくれ。
974 デフォルトの名無しさん [] Date:2009/11/23(月) 18:18:58 ID: Be:
反対するのは荒らしたい奴だけだから強行しちゃって良いよ
0756デフォルトの名無しさん
2009/11/26(木) 21:23:180757デフォルトの名無しさん
2009/11/27(金) 21:27:13Excel2007
テキストボックスについてですが。
MultiLineをtrueに、ScrollBarsをfmScrollBarsBoth
にセットして、データの表示(更新)用に使っています。
表示する時にマウスのホイールボタンでスクロール出来るようには
出来ないのでしょうか?
0758デフォルトの名無しさん
2009/11/28(土) 01:08:030759720
2009/11/28(土) 11:55:34こんにちは
マクロを使い、オートフィルで連続データを作成しているのですが、
書式もオートフィルされてしまい困っています。
値だけをオートフィル(連続データ)するやり方があればご教授ください。
宜しくお願いします。
0760デフォルトの名無しさん
2009/11/28(土) 12:12:040761デフォルトの名無しさん
2009/11/28(土) 12:18:21試したけど無理っぽいから、あきらめてきちんとコードを組む
0762デフォルトの名無しさん
2009/11/28(土) 12:40:59設定項目 内容
Object Rangeオブジェクトを指定
Destination オートフィルの書き込み先のRangeオブジェクトを指定
Type 入力されるデータの種類を指定。XlAutoFillクラスの定数を指定
XlAutoFillクラスの定数
・xlFillDefault:標準のオートフィル
・xlFillSeries:連続データ
・xlFillCopy:コピー
・xlFillFormats:書式のみコピー
・xlFillVaules:書式なしコピー
・xlFillYears:年単位
・xlFillMonths:月単位
・xlFillDays:日単位
・xlFillWeekdays:週日単位
・xlLinearTrend:加算
・xlGrowthTrend:乗算
0763デフォルトの名無しさん
2009/11/28(土) 13:02:020764デフォルトの名無しさん
2009/11/28(土) 16:03:46オートフィルもExcelマクロっぽくて悪くないと思うから
とりあえずオートフィルして書式は別に直すとか
0765デフォルトの名無しさん
2009/11/28(土) 18:56:46Excel VBAからワードや他のエクセルファイルの操作ってできますか?
やりたいこととしては、VBAを仕込んだxlsファイルに、
置換したい文章を記述し(置換前と置換後をシート内に記述)、
指定したフォルダ内(サブ含む)にあるエクセルファイルやワードファイルに
書かれている文章を変換したいのです。
その際、「この文章を変換しました」みたいなログも出せたら最高なのですが、
いい方法ってありますか?
0766デフォルトの名無しさん
2009/11/28(土) 18:58:000767デフォルトの名無しさん
2009/11/28(土) 19:10:59VBAから他のファイルを操作できる
ログは画面にだすならmsgboxでいいでしょ
フィルに書き出したいならテキストファイルでもオープンして書き出せばよい
0768759
2009/11/28(土) 20:18:10ご回答、ありがとうございます。
やはりむりですか・・・
オートフィル以外でいくつかつくったのですが、スピードを重視したくオートフィルにこだわっていました。
やりたいことは、A1の値を基にB1:B100までA2で指定された増分値に沿った降順連続データをつくりたかったのです。
考えついたものを下記に貼りますので、改善点やより良いコードがありましたらご教授ください。
宜しくお願いします。
Sub test1()
基準値 = Cells(1, 1).Value
増分値 = Cells(2, 1).Value
For i = 0 To 99
Cells(1 + i, 2).Value = 基準値
基準値 = 基準値 - 増分値
Next i
End Sub
Sub test2()
基準値 = Cells(1, 1).Value
増分値 = Cells(2, 1).Value
For i = 0 To 99
Cells(1 + i, 2).Value = 基準値 - i * 増分値
Next i
End Sub
Sub test3()
増分値 = Cells(2, 1).Value
For i = 1 To 100
Cells(i, 2).Value = WorksheetFunction.Sum(Cells(1, 1).Value, Cells(2, 1).Value - i * 増分値)
Next i
End Sub
0769デフォルトの名無しさん
2009/11/28(土) 20:28:08具体的にはどのようにするんでしょう・・・<ファイル操作
また、AAAという単語はヒットしたので置換したけど、
BBBという単語がない場合、AAAだけ置換したよ、というログとかも取れますか?
0770デフォルトの名無しさん
2009/11/28(土) 21:01:43ちなみにieを使ったシステムへの自動化を考えてます。
それの助けになるか聞きたいです。
0771デフォルトの名無しさん
2009/11/28(土) 21:08:53おし引き受けた!
レビュー:
読んだことないけど多分読まないよりましじゃね?
0772デフォルトの名無しさん
2009/11/28(土) 23:39:43何をやりたいのかもうちょっと詳しく
自動化って言えば聞こえはいいけど、よくよく話を聞いてみると
たいていは株とかFXとかで楽して儲けたいだけみたいなのが多い
0773デフォルトの名無しさん
2009/11/28(土) 23:44:31例えば、マクロ記録で目的のファイルを開いて、できたブックからシートを自分のシートに移動する
で、移動してきたシートをコピーしといて、どちらか一方を置換する
あとは置換後に双方を比較して、違う部分を表示するとか
他にも方法は山ほどある
まずは自分でアウトラインを固めて、ポイントを絞って質問してくれないと回答しようが無い
0774デフォルトの名無しさん
2009/11/28(土) 23:45:54まぁ株なりFXの自動売買だろ
そして、この程度も自分で調べてできない人間はロクなシステム組めないに1000ガバス
0775デフォルトの名無しさん
2009/11/28(土) 23:57:41すいません、大雑把にしか書いてなかったので答えることもできなかったですねorz
仕様としてはこんな感じです。
VBAを記述したExcelに、置換前・置換後を記述したの置換リストをシートとして作成しておきます。
[VBA記述xlsファイル上の置換リスト]
置換前 | 置換後
------------------
ABC | XYZ
log-in | log in
login | log in
そのシート上にフォルダを指定するセルを用意し、ボタンを押す(マクロ実行)ことで、
指定されたフォルダ(サブフォルダ含む)にあるxlsファイル、docファイルを参照。
ヒットしたファイルの中に、置換リストの置換前と同じ文章があった場合、
ログとして「(ファイル名)▲▲を●●に置換」のような情報を出力し、置換を行います。
うまく纏まっていないかもしれないですが、このような仕様でつくりたいと思っています。
ググってみた感じ、ワードファイルの文章置換を行うロジックはあったのですが、
「本当に置換を行ったか」が取得できなさそうな感じがして・・・。
(▲▲があれば●●に置換する、という処理なので、▲▲がなくても変換せずに処理が終わるはず。変換したか?という状態が取れない感じが)
0776デフォルトの名無しさん
2009/11/29(日) 00:06:24クレクレ君には無益なスレです
テンプレ参照
0777デフォルトの名無しさん
2009/11/29(日) 01:18:290778デフォルトの名無しさん
2009/11/29(日) 01:22:350779デフォルトの名無しさん
2009/11/29(日) 02:30:54バージョンは2002です。
単刀直入に聞きます
「ユーザーフォーム上に設置したスプレッドシート」
これをエクセルのシートのように読み込む(ActiveSheet.Range(Cells(1, 1)〜のような書式)ことは可能でしょうか?
0780デフォルトの名無しさん
2009/11/29(日) 10:31:56可能
0781デフォルトの名無しさん
2009/11/29(日) 14:03:26そこで、windows7にはXPモードがあると聞きました。そのXPモードで使われるIEがバージョン6なのかが気になっています。
IE6を使えるなら早めにwindows7搭載のPCに買い替えるつもりです。どうかお教えください。
0782デフォルトの名無しさん
2009/11/29(日) 14:41:080783デフォルトの名無しさん
2009/11/29(日) 14:46:46注意事項としてXP Modeは Windows 7 Professional 以降で搭載される。
一般のメーカー製 Windows 7 プレインストールPCはほとんどが Home Premium でXP Modeは搭載されてないので注意
あと、XP Modeといっても特に他アプリと連携するような場合には
正常に動作するか分からないのでできれば事前にどこかで確認してみることをすすめる
おそらく統合機能ってのを使わなければ、ほぼ問題ないとは思うけど、統合機能使わないと XP Mode の利点はあまりないと思うし
0784デフォルトの名無しさん
2009/11/29(日) 15:05:340785781
2009/11/29(日) 17:48:41バーチャルPCについて調べてみましたが、これならvistaでもxpを動かせるのですね。インストールして試してみます。
ありがとうございました。
0786デフォルトの名無しさん
2009/11/30(月) 15:26:51入力した数字が6〜10のとき○、11〜15のとき◎
A B
1 6 ○
2 11 ◎
という風に○や◎を表示させたいのですが、関数がどうしてもわかりません。
どなたかよろしくお願いいたします。
0787デフォルトの名無しさん
2009/11/30(月) 15:33:260788デフォルトの名無しさん
2009/11/30(月) 15:52:520789デフォルトの名無しさん
2009/11/30(月) 19:19:49Maru = ""
If (6 <= n) And (n <= 10) Then Maru = "○"
If (11 <= n) And (n <= 15) Then Maru = "◎"
End Function
0790デフォルトの名無しさん
2009/11/30(月) 22:39:342007です。
0791デフォルトの名無しさん
2009/12/01(火) 13:34:59作業列使って自分でスペースを追加して、右詰めに見えるようにするしかないみたい
0792デフォルトの名無しさん
2009/12/01(火) 22:39:45デフォルトでチェックを入れることってできますか?
0793デフォルトの名無しさん
2009/12/02(水) 18:53:270794デフォルトの名無しさん
2009/12/03(木) 00:32:24スペース区切りをセル区切りにした時に、数値として
認識されてしまい、頭の0が消えてしまいます。
数値を文字列として認識させる方法はありますでしょうか。
例)
Sub hoge()
Cells(1, 1).Select
Selection.TextToColumns DataType:=xlDelimited, _
Space:=True
End Sub
実行前
A1 B1
hoge 012|
実行後(B1に"012"と表示させたい)
A1 B1
hoge | 12
以上、宜しくお願いします。
0795デフォルトの名無しさん
2009/12/03(木) 01:27:05書式で"000"にするとか、書式で文字列にするとか
0796デフォルトの名無しさん
2009/12/03(木) 04:45:21アポストロフィ012
0797デフォルトの名無しさん
2009/12/03(木) 08:27:20Selection.TextToColumns Space:=True, FieldInfo:=Array(Array(2, 2))
0798デフォルトの名無しさん
2009/12/03(木) 10:06:190799デフォルトの名無しさん
2009/12/03(木) 18:30:35ファイルってExcelのファイル限定?
それともあらゆるファィル?
0801デフォルトの名無しさん
2009/12/04(金) 10:09:56想定ではあらゆるもの
テキストとかじゃなく、他のアプリで作られるファイルとかが対象かな
GIFとかZIPとか
0802デフォルトの名無しさん
2009/12/04(金) 10:47:50それ不可能
0803デフォルトの名無しさん
2009/12/04(金) 11:12:35やっぱ不可能か・・・。助言どもです。
0804デフォルトの名無しさん
2009/12/04(金) 21:17:59変更はともかく削除はできるよ
多少問題は出るけど
まぁ大した欠点ではないよ
元ファイルのデータが一部失われるってことくらい
0805デフォルトの名無しさん
2009/12/04(金) 23:41:53「変更・削除」だっつってんだろ!
使えねぇヤツだな〜
0806デフォルトの名無しさん
2009/12/05(土) 00:05:360807デフォルトの名無しさん
2009/12/05(土) 13:11:13hogehoge(
とかまで書いて
引数コピペのために上の行にいこうと矢印キーで移動しようとすると
コンパイルエラー:
修正候補:式
とか出てきてうざいんだが
これを出さないようにする方法とかないですかね・・・
0808デフォルトの名無しさん
2009/12/05(土) 13:47:44ツール → オプション → 自動構文チェック
色が変わるだけでダイアログが出なくなる
色も変わらないようにする方法は知らん
0809デフォルトの名無しさん
2009/12/05(土) 14:01:42ありがと!
かなり楽になった
0810デフォルトの名無しさん
2009/12/05(土) 22:57:10【2 Excelのバージョン 】 Excel2007
【3 VBAが使えるか .】 勉強中
GetSaveAsFilenameメソッドで名前を付けてブックを保存し、
そのファイル名を変数に代入して別のサブルーチンから
そのブックのあるシートをアクティブにしようとしたら
「インデックス範囲が有効範囲にない」っていうエラーが出ます。
プロシージャは
sub 1()
myFile = Application.GetSaveAsFilename
Workbooks.Add
ActiveWorkbook.SaveAs myFile
End sub
sub 2()
Workbooks(myFile).WorkSheets(1).Activate
End sub
みたいな感じです。myFileはモジュールレベルで宣言してて、
Sub 2でMsgBox関数でmyFileの値を調べたら
フルパス+ファイル名.xlsになっててちゃんと開けそうな
気がするんだけどエラーが出る…orz
しょぼい質問ですが是非アドバイスをお願いします。
0811デフォルトの名無しさん
2009/12/06(日) 00:16:40フルパスじゃなくファイル名だけでないかな
0812デフォルトの名無しさん
2009/12/06(日) 00:29:29ブックに対してならアクティブにできるの?
0813デフォルトの名無しさん
2009/12/08(火) 18:14:39ありがとうございます!
詳しく書くと
ユーザーフォーム上スプレッドシートのセルA1に"○"を表示
それをキーボードの矢印キーで制御
移動先のセルが""でなければ移動できない
というようなプログラムを考えてました!
0814デフォルトの名無しさん
2009/12/08(火) 23:05:460815デフォルトの名無しさん
2009/12/09(水) 01:49:49Sub A123〜A244をB1〜B123に移し替え・・・()
Sheet1("Sheet1").Active
Dim i As Integer
i = 2
Do
Sheet1("Sheet1").Range(Cells(123, 1), Cells(244, 1)) _
.Cut Destination:=Sheet1("Sheet1").Cells(1, i)
Sheet1("Sheet1").Range(Cells(123, 1), Cells(244, 1)) _
.Deleat Shift:=xlShiftUp
i = i + 1
Loop While Cells(123, 1).Value <> " "
End Sub
i = 2の場所で実行時エラー'438' オブジェクトは、このプロパティまたはメソッドをサポートしていません。
となってしまい、実行できません。解決方法を教えていただけませんか?
0816デフォルトの名無しさん
2009/12/09(水) 02:24:17でもエラーは i = 2 で出るのか
as integer を外してみれ
0817815
2009/12/09(水) 02:40:43レスありがとうございます。
Dim i
Cut Destination:=Sheet1("Sheet1").Renge(Cells(1,i), Cells(123,i)
にしても、やはり同様のエラーが出てしまいました。
0818デフォルトの名無しさん
2009/12/09(水) 02:50:360819815
2009/12/09(水) 03:14:20Microsoft Excel Objectsの下にあるSheet1(aiueo)というファイルにプログラムを適用したい場合、
Module1のGeneralに下記のコードを書けばいいんですよね?
Sub コピー()
Sheet1("aiueo").Active
Dim i
i = 2
Do
Sheet1("aiueo").Range(Cells(123, 1), Cells(244, 1)) _
.Cut Destination:=Sheet1("aiueo").Range(Cells(1, i), Cells(122, i))
Sheet1("aiueo").Range(Cells(123, 1), Cells(244, 1)) _
.Deleat Shift:=xlShiftUp
i = i + 1
Loop While Cells(123, 1).Value <> " "
End Sub
0820デフォルトの名無しさん
2009/12/09(水) 03:21:34Worksheets(" ") ってやってる
0821デフォルトの名無しさん
2009/12/09(水) 07:27:00シート名はaiueoだよ
workhseets("aiueo").range("A1")やsheet1.range("A1")とかんじで使いますよね
0822デフォルトの名無しさん
2009/12/09(水) 09:05:43Dim r, i
i = 0
'10行目を開始で、60行ごとに20ページ検索する
For r = 10 To 60 * 20 Step 60
i = i + 1
'B列の対象セルにデータがある場合
If ActiveSheet.Cells(r, 2) <> "" Then
'対象のページを印刷する
ActiveWindow.SelectedSheets.PrintOut _
From:=i, To:=i, Copies:=1, ActivePrinter:="", Collate:=True
End If
Next r
End Sub
すみません、質問です。
このVBAで、指定したセルに数字が入ってるページだけ印刷するように
したいのですが、その指定したセルに関数が入っているとデータと認識して
数字が入っていなくても印刷してしまいます。
関数が入っていても、数字が入っていないページを印刷しないようにするには
どうすればいいでしょうか?
OSは、ビスタ。
バージョンはエクセル2007です。
よろしくお願いします。
0823デフォルトの名無しさん
2009/12/09(水) 09:27:57If Worksheets("sheet1").Cells(1, 1).HasFormula Then
MsgBox "数式が入っている"
End If
みたいに HasFomula で判断できるから後は数字が入っていないというのをどういう風に判断するか
結果としての値が0になってるのか、それ以外の値が入っているのかどうかで作り方が判ると思うけど、どう?
0824デフォルトの名無しさん
2009/12/09(水) 11:24:18標準モジュール1
private sub main()
dim a as column
call test(a)
end sub
標準モジュール2
public sub test(byref a as column)
end sub
というコード(処理は省略しました、columnはユーザー定義型です)を実行すると
「byref型が一致しません」というエラーが出ます。
試しに新規ブックを作り、セルを全選択してコピー、標準モジュールもコピーしてみると
新規ブックの方ではエラーが出ずに実行されました。
この理由は一体何なんでしょうか。
OSはXP SP3、エクセル2002です。
0825デフォルトの名無しさん
2009/12/09(水) 17:34:48ぬるぽ
0826デフォルトの名無しさん
2009/12/09(水) 18:03:52標準モジュール以外にcolumnの定義がある?
0827デフォルトの名無しさん
2009/12/09(水) 20:18:59特に定義してません。
今気づいたんですけど、ColumnプロパティとかColumn関数というのがあるんですね。
もしやと思って>>824のColumnをColumに変更したらあっさり実行できました。
ただColumnのまま新規ブックにコピーした方は、何故実行出来たのか今だ不明です。
0828デフォルトの名無しさん
2009/12/09(水) 20:35:44すいません
自分では定義してないだけで、コピー元の方はオートコンプリートの欄にColumnが2つありました。。。
コピー先の方はColumnが、一つになってました。コピーすると重複してたら、自動でユーザー定義の方を優先するんですかね。
解決しましたありがとうございました。
0829デフォルトの名無しさん
2009/12/09(水) 20:53:450830デフォルトの名無しさん
2009/12/09(水) 20:57:31VBScriptについて必死に話し合うスレ
http://pc12.2ch.net/test/read.cgi/tech/1242136180/l50
0831デフォルトの名無しさん
2009/12/09(水) 23:36:25そうですね…
実際エクセルでRPGを作ろうとしてます
ただいかんせん初心者なもので探りさぐりな状態が続いてます
もちろん自力でやるつもりですが、>>813のようなものを作ることが可能かどうか教えていただけたら幸いです
0832デフォルトの名無しさん
2009/12/10(木) 00:02:52Excelはセルが編集状態になってしまうとイベントを拾うのが困難になるので
難しいというか、VBAはゲームに向いてないと思うよ。
まあ絶対不可能ではないし、難しいことに挑戦するのは悪い事じゃないんで
とりあえず参考サイト
ttp://www1.plala.or.jp/chikada/vba/cellvader/cellvader.htm
0833デフォルトの名無しさん
2009/12/10(木) 08:02:280834デフォルトの名無しさん
2009/12/10(木) 11:29:07でも、>>832にしてもそうだけど、結局タイマーとキー入力はAPIを直接呼んでるんだよね。
0835デフォルトの名無しさん
2009/12/10(木) 17:28:10一行が一つのファイルに対応するような表を作成したい。
できればその表をリアルタイムに更新できるようにしたい。
どういうVBAを用いればよいですか?
例えば,ファイルA,ファイルB,ファイルC,‥があったとして
A1 ファイルAのセルH5
A2 ファイルBのセルH5
A3 ファイルCのセルH5
・
・
という形の表を作るには?どういうVBAの流れにすればいいのか
簡単でもよいので教えてくださいませんか?
0836ag
2009/12/10(木) 17:37:040837デフォルトの名無しさん
2009/12/10(木) 17:40:410838ag
2009/12/10(木) 18:28:09その方法が分かりません
0839デフォルトの名無しさん
2009/12/10(木) 18:33:430840デフォルトの名無しさん
2009/12/10(木) 18:35:110841デフォルトの名無しさん
2009/12/10(木) 18:48:490842デフォルトの名無しさん
2009/12/10(木) 19:00:38VBAのSplitを正規表現で表せるようになった!
複数デリミタも指定出来るで!
チラ裏でした。
0843デフォルトの名無しさん
2009/12/10(木) 22:20:03特定のフォルダ内にあるjpg画像をエクセルに取り込み、
定期的に入れ替わる10のjpg画像を、例えばセルA1〜A10に、
貼り付けて表示できるようなマクロを探しています。
jpgのサイズはスキャナで取り込むものなので常に同じです。
宜しくお願い致します。
0844デフォルトの名無しさん
2009/12/10(木) 22:24:16'単一フォルダから
Set fso = CreateObject("Scripting.FileSystemObject")
Set objFolder = fso.GetFolder("c:\windows")
Set txs = fso.CreateTextFile("c:\filelist.txt")
For Each file In objfolder.Files
txs.WriteLine file.Name
Next
txs.Close
0845デフォルトの名無しさん
2009/12/10(木) 23:22:46ここはプログラマのスレ
完成品はココにはないぜ
0846デフォルトの名無しさん
2009/12/10(木) 23:30:42適当だが
http://www1.axfc.net/uploader/Sc/so/62747
0847822
2009/12/11(金) 10:07:15ご返答、ありがとうございます。
>結果としての値が0になってるのか、それ以外の値が入っているのかどうかで作り方が判ると思うけど、どう?
なるほど。
参照するセルは、関数の結果によって0もしくは1以上の整数となるので、以下の形でいいですよね?
全然素人なものですみません。
Sub 印刷()
Dim r, i
i = 0
'10行目を開始で、60行ごとに20ページ検索する
For r = 10 To 60 * 20 Step 60
i = i + 1
'B列の対象セルが1以上の場合
If ActiveSheet.Cells(r, 2) >=1 Then
'対象のページを印刷する
以下略
0848843
2009/12/11(金) 13:59:47>>845
誤解してます。
既に色々な本を調べ。検索しても分からないので
質問させていただいています。
また、概要さえ教えていただければ、
後は自分でつくります。
丸投げではありません。
皆様、どうか宜しくお願いします。
0849デフォルトの名無しさん
2009/12/11(金) 14:09:130850デフォルトの名無しさん
2009/12/11(金) 14:36:11どこまで分かっているの?
(1)特定のフォルダ内にある定期的に入れ替わる10のjpg画像を
(2)エクセルに取り込み
(3)例えばセルA1〜A10に貼り付けて表示
ってことなの?
0851デフォルトの名無しさん
2009/12/11(金) 21:58:58マクロを探してるって時点で完成品探しなのかなと
>>850さんの言うとおり、何ができて何が出来ないかはっきりしないと答えようが無い
後だしを防ぐために全体を晒すのと同時に、ポイントを絞ったほうが良いかと
0852デフォルトの名無しさん
2009/12/11(金) 23:58:41ほっとけよw
0853デフォルトの名無しさん
2009/12/12(土) 00:01:49○ 同義 どうぎ
0854デフォルトの名無しさん
2009/12/12(土) 00:05:37× 尿意
0855デフォルトの名無しさん
2009/12/12(土) 00:38:151.
VBAのテキストエディタでVBを 初めて書いているんですが、
TABを入力した部分が半角スペースになってしまい、とても使いにくいです。
TABはTABのままにしてもらうには、どこで設定すれば良いでしょうか。
2.
継続行が、うまく記述できません。エラーが出ます。
if( (A=B)
And (B=C)
And (D=F) ) then などのようにやりたいのです。
3.
JI = LEFT$ (TIME$, 2)
FUN = MID$ (TIME$,2,2)
BYOU = RIGHT$(TIME$, 2)
というように、=や()の位置をそろえたいのですが、スペースを入れても
勝手に1桁のスペースにされてしまいます。
そうならないようにするためには、どこで設定するのでしょうか。
4.
コメントは'ですが、複数行にわたってコメントアウトしたいとき
(C言語の
/*
*/ のように)は、どのようにすれば良いでしょうか。
以上です。宜しくお願いします。
使いにくくてしょうがないです。
宜しくお願いします。
0856デフォルトの名無しさん
2009/12/12(土) 00:48:04諦めて
2はアンダーバーで改行できて
4は複数行のコメントは行の頭全部に'ってやるしかないと面倒だけど。
0857デフォルトの名無しさん
2009/12/12(土) 00:52:03さっそくありがとうございます。
え〜〜 ショックです。そうなんですか?
外部エディタを使えばできそうな気がしますが、
そんなのは許さないでしょうか、ゲイツ君が。
ショックです。使いにくいエディターですねぇ。
ありがとうございます。
0858デフォルトの名無しさん
2009/12/12(土) 10:10:58emacs bindはあるみたいだけど(vba以外)、指がなじまん(vi派)
0859デフォルトの名無しさん
2009/12/12(土) 10:36:000860843
2009/12/12(土) 13:50:44レスありがとうございます。
>(1)特定のフォルダ内にある定期的に入れ替わる10のjpg画像を
>(2)エクセルに取り込み
>(3)例えばセルA1〜A10に貼り付けて表示
そのとおりです。
宜しくお願いいたします。
0861デフォルトの名無しさん
2009/12/12(土) 14:05:000862デフォルトの名無しさん
2009/12/12(土) 14:12:54テキストボックスにユーザーが入力した範囲で
Rangeを作成するのですが
ユーザー入力の文字列を正当な範囲指定文字列(D4とかA1:C3など)と判定する手段
というのはあるのでしょうか?
現在は
On Error GoTo Exception
set rangetest = range("ユーザー入力文字列")
On Error GoTo 0
Exception:
msgbox "不正な文字列"
みたいにしてるのですが
専用の関数が存在したりするのでしょうか?
0863デフォルトの名無しさん
2009/12/12(土) 14:40:12回答になってるかどうかわからんけど
俺ならテキストボックスに入力させる段階でInputBoxメソッド使うな。
(関数じゃなくてメソッドのほうね。使い方はヘルプ参照)
Excelに判定させられるからラクじゃね?
0864デフォルトの名無しさん
2009/12/12(土) 16:06:37Excel2000です。
セルに、文字または数字を書き込みたいとき、
Cells().value と Rangr().valu とがあるようなのですが、
その違いがわかりません。教えてください。
1. セルに文字または数字を書くときはどちらが良いのでしょうか?
「コレを使うのが本当だ」というお話があれば、ぜひ教えてください。
2. 書き込むものが、文字と数字で両者を使い分ける、とかでしょうか?
3. 1の関連ですが、では、他方は何のために同じようなことができるのでしょうか?
どちらか1つあればよいのではないか?と考えてしまいます。
4. forで数字を変化させて、このセルから下に順番に数字を書きたい、という場合
Cells().valueだと、引数に数字がはいりますので、セル位置を変化させたい場合には
ふさわしいと思います。
が、Range()の場合でも、("A" & format(count))のようにすれば、
forなどでも使えるのでしょうか?
宜しくお願いします。
0865デフォルトの名無しさん
2009/12/12(土) 16:41:35ttp://hanatyan.sakura.ne.jp/vbhlp/Excel12.htm
0866デフォルトの名無しさん
2009/12/12(土) 16:46:53Rangeは「セル範囲」
Cellsは「セル」
同じじゃなくて違うんだよ。
単一セル指定にどっちがいいかといえば実用上からいえばどっちでもいいと思う。
0867デフォルトの名無しさん
2009/12/12(土) 17:25:36自分でルール決めればいいんじゃね?
俺もmyルールがあるが多分支持されないんで公開はしないw
0868デフォルトの名無しさん
2009/12/12(土) 17:46:42toolboxにRefEditというのがあってあれで範囲がはいるようになってるけど、それでは駄目?
0869デフォルトの名無しさん
2009/12/12(土) 18:41:21>定期的に入れ替わる10のjpg画像を「定期的に」取り込む
「定期的に」以外のことはどのVBAの本を見てもだいたい出てるはずだが
マクロの自動記録をonにして 挿入-> 図 -> ファイルから
で生成されるコードを 見るべし・見るべし・見るべし
0870デフォルトの名無しさん
2009/12/12(土) 20:03:24VBAからリストの追加や削除を行いたいのですが
どうすればよいのでしょうか?
ドロップダウンリストの名称も不明のため困っています。
0871デフォルトの名無しさん
2009/12/12(土) 20:42:17>869さんの方法でわかりました。
0872デフォルトの名無しさん
2009/12/12(土) 20:58:462007以降でシート上のオブジェクトがらみの自動記録死亡してるから
先行き自信ないよ俺。
0873デフォルトの名無しさん
2009/12/13(日) 04:21:05何故でしょうか。
if( (A=B) _ ' ここにコメントを置くとエラーと言われます。
(C=D) ){ 'ここに書くのは大丈夫みたいです。
end if
0874デフォルトの名無しさん
2009/12/13(日) 04:54:47なぜかってむつかしいことはわからんけど
継続してる途中にコメント突っ込まれてもExcelが困るだろうとは思う。
確かコメント行は独立させるのが正しい作法だったような俺はあまりこだわらないけど。
0875デフォルトの名無しさん
2009/12/13(日) 08:54:19Office:Office2003 personal SP3
です。
昨日Officeをインストールしたのですが、インストール直後から
コマンドボタン、ラベルなどのコントロールをワークシートに貼り付けても、
1.配置時点でWidth、Heightが小さい。(0.6になっている)
2.貼り付けたボタンが見えない。(透明?になっていてボタン背景、キャプションも見えない)
3.Width、Heightを大きくすることはできるが、ボタンの背景が透明?なまま大きくなり、
クリックしても_clickイベントが発生せず、キャプションも見えない。
というような状態になり、困っております。
一度Officeの再インストールはしたのですが、状況は変わりません。
なにか対処法があれば教えていただけないでしょうか?
(↓スクリーンショットです。セルA3のあたりにコマンドボタンを貼り付けたのですがこのようになります。)
http://fx.104ban.com/up/src/up10525.jpg
0876デフォルトの名無しさん
2009/12/13(日) 09:02:49えっ そうなんだ・・・
それはかなり痛いSpecダウンだ・・・
>873
想像だけど VBAは文中コメントがかけない
# Cみたいな /* */ が無い
だから
if( (A=B) ' ここにコメント 略 (C=D) ){
end if
こんな感じで展開されるんじゃ無いかなと
0878デフォルトの名無しさん
2009/12/13(日) 15:38:282010では復活するってどこかで見たよ
0879デフォルトの名無しさん
2009/12/13(日) 15:52:27質問なのですが、
excelに複数のブックが開いている状況で、その中の一つのブックを
Application.EnableEvents = False にすると、他のブックのイベント処理も停止してしまいます。
それを回避することは出来るでしょうか?
0880デフォルトの名無しさん
2009/12/13(日) 16:16:360881デフォルトの名無しさん
2009/12/13(日) 16:57:04ブックを指定すると○
0882デフォルトの名無しさん
2009/12/13(日) 17:19:21だいぶ前から2010のβ版が無料で落とせるようになってるから試してみればいい。
0883デフォルトの名無しさん
2009/12/13(日) 17:23:26うちの低スペックPCだと怖くてw
0884デフォルトの名無しさん
2009/12/13(日) 19:04:49それは初耳。
ほっとしたわ。とくにグラフ関係とか自動記録に聞きまくってるから
あれなしではやっていけん。
0885デフォルトの名無しさん
2009/12/13(日) 20:52:33他の操作はどうなったのかは知りません〜
0886879
2009/12/14(月) 16:45:17レスありがとうございます。
ブックを指定するということは、
Application.Workbooks("ブック名").EnableEvents = False
で、よろしいでしょうか?
0887デフォルトの名無しさん
2009/12/15(火) 03:40:17競馬の騎手の複勝率と複勝回収率データがあって
10/10迄、11/01迄、12/20迄というように、
ある日付までに複勝率が30%以上だった騎手を購入した場合の
複勝回収率を出すにはどうすればいいのでしょうか?
どの騎手でも構わないのですが、レースが行われる前日まで複勝率30%だった騎手の馬を
購入していた場合の回収率を知るにはどうすればいいのでしょうか?
0888デフォルトの名無しさん
2009/12/15(火) 05:50:52あとは気合でその日付までの複勝数/レース数を計算させればいんじゃね
すまん競馬はよく知らん
0889デフォルトの名無しさん
2009/12/15(火) 07:55:38ワークシート関数使えない人がここに紛れ込んできたのか、
あえてVBAでやらないといけない事情があるのかどっちなんだろ。
0890デフォルトの名無しさん
2009/12/15(火) 11:01:14現在EXCEL2003上のデータをSQLServer2008から提供しようとしています。
EXCEL2003--MSクエリ--SQLServer2008
SQLServer2008側でテーブル名が漢字になっている為にMSクエリが使えない状態です。
原因はMSクエリ側から発行SQL文にあります。
漢字をテーブルに使う場合、識別子'['を使ってテーブル名を囲う必要があります。
例:テーブル名:H20年度売上(01月)の場合
select * from [H20年度売上(01月)]を発行しないといけないのに、MSクエリを使った時のSQL文は
select * from H20年度売上(01月)でした・・・
これを回避する手段はありますか?
教えてください。
よろしくお願いします。
0891デフォルトの名無しさん
2009/12/15(火) 11:20:59Vistaで動いていた下記のソースで、
jpgファイルのファイル名が取得できません。
どうすれば良いのでしょうか?
myPath = ActiveWorkbook.Path
ChDir myPath
myFName = Dir("*.jpg")
0892デフォルトの名無しさん
2009/12/15(火) 11:25:20「2行目以降のデータにブランクがあれば1行目で指定している桁数分だけスペースで埋める」
という処理をしているのですが
Sub スペース桁合わせ()
Dim R As Long
Dim C As Long
For R = 2 To 100
For C = 1 To 100
B = Cells(1, C)
If Cells(R, C) = "" Then
Cells(R, C) = Application.WorksheetFunction.Rept(" ", B)
End If
Next C
Next R
End Sub
あまりにも処理が遅くて大量のデータを扱えません。
至極単純な処理なので、遅い原因はやはりRept関数ではないかと思うのですが、もっと速い方法はないでしょうか?
0893デフォルトの名無しさん
2009/12/15(火) 11:50:53Replace使ったら爆速になりました。
0894デフォルトの名無しさん
2009/12/15(火) 20:02:00一定期間内の3着以内回数/騎乗回数を求めるのだけど
手っ取り早いのはオートフィルタを使うこと
本当に薦めたいのはADO経由でSQLを使うこと
>>890
MSクエリをやめてADOを使う
0895デフォルトの名無しさん
2009/12/15(火) 23:57:15データベース向きの仕事と表計算に向いてる仕事
適材適所だと余分な苦労をしなくてすむ
お作法を覚えるまでのチョットの苦しみを越えられるかどうか
0896デフォルトの名無しさん
2009/12/16(水) 03:23:47次のコードを作りました。
Sub CSVへ企画カテゴリー転送()
Dim ABC As Long
For ABC = 13 To 70 Step 2
Dim DEF As Long
For DEF = 2 To 21
If Cells(ABC, 12).Value = "あ" Then
Worksheets("CSV").Cells(DEF, 2) = Worksheets("倉庫").Range("T19")
End If
If Cells(ABC, 12).Value = "い" Then
Worksheets("CSV").Cells(DEF, 2) = Worksheets("倉庫").Range("T20")
End If
If Cells(ABC, 12).Value = "う" Then
Worksheets("CSV").Cells(DEF, 2) = Worksheets("倉庫").Range("T21")
End If
・・・(以下同じように続きます)
Next DEF
Next ABC
End Sub
要するに、アクティブシートのL13、L16・・・の値が
「あ」なら、シート'倉庫の'該当うるセルの値を、
該当するシートCSVと同じにしていく、
というマクロなのですが、
なぜか上手くいきません。
ご指摘の程宜しくお願い致します。
0897デフォルトの名無しさん
2009/12/16(水) 03:31:270898デフォルトの名無しさん
2009/12/16(水) 03:57:170899デフォルトの名無しさん
2009/12/16(水) 04:11:17L13、L16… ならStepは2じゃなくて3
0900デフォルトの名無しさん
2009/12/16(水) 05:04:11Value="あ"がTrueだった時のその後のIfに同情を禁じ得ないんだが
0901デフォルトの名無しさん
2009/12/16(水) 08:53:20>>897
有難うございます。
まったく変化が起こらないのです。
>>899
有難うございます。
お陰で一歩前進できました。
しかい、やはり何も変化が起きません。
まだ他に原因があるのだとおもいます。
>>900
有難うございます。
もうすこし具体的に教えていただけないでしょうか。
宜しくおねがいします。
0902デフォルトの名無しさん
2009/12/16(水) 09:19:05横レス失礼
> If Cells(ABC, 12).Value = "あ" Then ←どのシートのセルですか?
複数シートを扱うスクリプトの場合は
> Worksheets("CSV").Cells(DEF, 2) = Worksheets("倉庫").Range("T19")
のように、シート名を指定しないと不確実だと思う。
0903デフォルトの名無しさん
2009/12/16(水) 10:38:15【バージョン】
OS:XPsp2
EXCEL:2002
【質問】
VBAにおけるクラスのプロパティってどういう場合に使用したら良いのでしょうか?
プロパティを使用しなくとも、Functionだけで同じ役割をより柔軟に作れそうに思えますが・・・。
Javaにおけるメンバとメソッドとはどのように違うのでしょうか?
0904デフォルトの名無しさん
2009/12/16(水) 11:04:490905デフォルトの名無しさん
2009/12/16(水) 14:17:38画像を挿入する位置(画像の左上が挿入すれるセルの位置)を
指定して、画像を挿入するには、どうすれば良いのでしょうか?
0906デフォルトの名無しさん
2009/12/16(水) 14:46:01例題 俺のをサンプルにすればOK
使うのは
ピクチャーインサートプロパティね。
On Error Resume Next
Range("H11").Select
ActiveSheet.Pictures.Insert( _
"C:\Documents and Settings\a\My Documents\My Pictures\ScanSnap\resized\" & Range("I12") & Range("H89").Value).Select
Selection.ShapeRange.ScaleWidth 0.25, msoFalse, msoScaleFromTopLeft
Selection.ShapeRange.ScaleHeight 0.25, msoFalse, msoScaleFromTopLeft
0907デフォルトの名無しさん
2009/12/16(水) 20:33:19オレ、select case好きよ
でも2ケース位ならelsei
VBAで書くときは速度云々よか見やすいコードを書きたい
でも自分的に芸術的な構造化をしても見るのは自分だけw
趣味レベルだし
0908デフォルトの名無しさん
2009/12/16(水) 22:02:36Application.FileDialog(msoFileDialogFolderPicker)
これで呼び出した場合、フォルダ名入力欄を隠したいのですが無理でしょうか
もしくは、フォルダ選択中にフォルダ名入力欄に対象のフォルダ名を表示してくれれば
そのままでもいいのですが、可能でしょうか
0909デフォルトの名無しさん
2009/12/16(水) 23:10:06時折、個別自作アイコンのxlsファイルを作ってる人がいるんだけど(そのxlsファイルをコピーした直後コピー先にThumbs.db ファイルが作成される)
やり方知ってる人います?
0910デフォルトの名無しさん
2009/12/16(水) 23:28:38アクティブシートは確実に
If Cells(ABC, 12).Value = "あ" Then
↑の対象シートですよね
すこし エスパー してみると
アクティブシートのセルL13,L16,L19がそれぞれ「あ」「い」「う」の時
1)シート"倉庫"のセルT19の値 を シート"CSV"のセルB2へ入れる
2)シート"倉庫"のセルT20の値 を シート"CSV"のセルB3へ入れる
3)シート"倉庫"のセルT21の値 を シート"CSV"のセルB4へ入れる
って やりたかったりするのかな
そうなら
For DEF = 2 To 21
ここが間違い(Forループさせちゃダメ)
現在のコードだと
1)シート"倉庫"のセルT19の値 を シート"CSV"のセルB2〜B21へ入れる
2)シート"倉庫"のセルT20の値 を シート"CSV"のセルB2〜B21へ入れる
3)シート"倉庫"のセルT21の値 を シート"CSV"のセルB2〜B21へ入れる
となるよ
0911デフォルトの名無しさん
2009/12/17(木) 01:14:09ムリだったとおも
自作フォーム作って、フォルダ内のファイル参照して、配置しれ
0912デフォルトの名無しさん
2009/12/17(木) 01:25:17.InitialFileName使えば開いた時のファイル名を指定できる
詳しくはこれみて
ttp://msdn.microsoft.com/ja-jp/library/cc326127.aspx
0913デフォルトの名無しさん
2009/12/17(木) 11:25:55選択するだけど
Sub TestFolder()
Dim ff As Object
Set ff = CreateObject("Shell.Application"). _
BrowseForFolder(0, "フォルダを選択してください", 0, "c:\")
If Not ff Is Nothing Then
MsgBox ff.Items.Item.Path
'選択したフォルダ名を表示
End If
End Sub
0914デフォルトの名無しさん
2009/12/17(木) 13:44:47感謝します。896です。
自宅はアクキンで書き込めなかったので、
遅レスすいません。
>って やりたかったりするのかな
全くそのとおりです。
>そうなら
>For DEF = 2 To 21
>ここが間違い(Forループさせちゃダメ)
そこでどうすれば良いのでしょうか。
模索したのですが分からない状態です。
ご教授宜しくお願いします。
0915910ではありません
2009/12/17(木) 14:47:33ループ変数をひとつにするといいです
iという変数を0〜19の間で変化させ、ABCとDEFはiから計算させます。
文字列変数(出力先セル位置を格納)とSelect文も使うとすっきりします。
Dim i as integer、 ABC as Long, DEF as Long, セル as string
For i = 0 To 19
ABC = i * 3 + 13
DEF = i + 2
Select Case Cells(ABC,12).Value
Case "あ"
セル = "T19"
Case "い"
セル = "T20"
Case "う"
セル = "T21"
Case Else
例外処理を入れる
Exit Sub
End Select
Worksheets("CSV").Cells(DEF, 2) = Worksheets("倉庫").Range(セル)
Next i
0916デフォルトの名無しさん
2009/12/17(木) 15:19:280917910
2009/12/17(木) 22:55:05なんか難しく考えすぎてない?
変数 DEF に初期値をセットしておいて
"倉庫"の該当セルから "CSV"への 1回の転送ごとに
変数 DEFの値を +1していけばいいだけでないかな
下記の例題コードで
変数DEF値がどのように変化するか考えてみて
DEF = 2
For ABC = 13 To 70 Step 3
DEF = DEF + 1
NEXT ABC
0918デフォルトの名無しさん
2009/12/18(金) 19:26:27>>910さん並びに>>915さん。
本当に有難うございます。
レス遅れてすいません。
自宅の回線がアクキンに巻き込まれたので、
会社から書き込み、返信が遅れてしまいました。
本当にお二人には感謝です。
しかし>>915さんのいうことは、
私には難しすぎ、
また>>910さんのいうことも、
難しく理解できませんでした。
しかし、もう少し思考をトライしてから、
いわれたことを理解できるよう、
再チャレンジしてみたいと思います。
有難うございました。
0919デフォルトの名無しさん
2009/12/19(土) 15:26:02Excelバージョン:2003 (11.8316.8221) SP3
Enumで定義した型をFunctionの戻り値にしようとすると
「ユーザ定義型は定義されていません」と言われて実行できません。
以下概略
Sub main()
(処理)
Select Case hoge2(str)
(処理)
End Select
(処理)
End Sub
Public Enum hoge
a = 0
b = 1
c = 2
End Enum
Public Function hoge2(hoge3 As String) As hoge 'エラー箇所
(処理)
End Function
こういう使い方はできないんですか?もしくは、おかしい箇所を教えてください。
0920デフォルトの名無しさん
2009/12/19(土) 15:51:43http://members3.jcom.home.ne.jp/daruma_kyo/info/enum.html
こういう事では無いの?
0921デフォルトの名無しさん
2009/12/19(土) 20:01:53私の使っているVBAのバージョンは6.5(Office2003)で、↓によると対応しているはずです。
ttp://www.geocities.co.jp/SiliconValley-Cupertino/4513/excel_tips.html
ヘルプにもEnumステートメントの使い方が書いてあるので、対応していないわけではないと思います。
0922デフォルトの名無しさん
2009/12/19(土) 20:43:07Enumの部分をモジュールの一番上(宣言部分)にする
mainで使うのに、mainの下にhogeがあるから
定義エラーになる
0923デフォルトの名無しさん
2009/12/20(日) 00:39:19できました!関数と一緒でどこで宣言してもいいと思ってました
ありがとうございます
0924デフォルトの名無しさん
2009/12/20(日) 16:54:15Excelのセルに、16進数5桁の数字(文字)が入っています。
これを10進数に変換して隣のセルに置きたいです。
hex2dec()で10進数に変換できることはわかりましたが、
16進数5桁が、符号付きの16進数なので、hex2dec()ができないで困っています。
fffff→+524286
80002→+2
80001→+1
80000→0
7ffff→-1
7fffe→-2
00000→-524287 という感じです。
何か良い方法はありますでしょうか?
0925デフォルトの名無しさん
2009/12/20(日) 17:05:04その計算間違ってないか?80000→0ならfffff→+524287だろ。
=HEX2DEC(A1)-524288
0926デフォルトの名無しさん
2009/12/20(日) 17:18:470927デフォルトの名無しさん
2009/12/20(日) 18:51:25C言語の本かHPを見て、signedとunsignedの所を嫁
ちなみに925が正解
0928デフォルトの名無しさん
2009/12/20(日) 20:24:20=SUMPRODUCT(($BN$14:$BN$709<=25)*($BX$14:$BX$709>0))
ここの
$BN$709、$BX$709
の部分を外部のセル参照にできないものでしょうか?
気持ち的には
=SUMPRODUCT(($BN$14:A1<=25)*($BX$14:$BXB1>0))
^^ ^^
A1 = BN300
B1 = BX300
とかです
0929↑ウザッ!
2009/12/20(日) 21:17:320931デフォルトの名無しさん
2009/12/20(日) 21:37:420932デフォルトの名無しさん
2009/12/20(日) 22:19:190933デフォルトの名無しさん
2009/12/21(月) 09:39:06以前、ヤフー知恵袋で似たような質問を見つけたので、それを参考にいじってみました
スプレッドシートの読み込みがやはり上手く行かないです
Private r As Range
Private r2 As Range
Sub 四角形1_Click()
ゲーム.Show
ゲーム.ActiveControl
ゲーム.Spreadsheet1.Range("C30") = "○"
Set r = ゲーム.Spreadsheet1.Range("C30")
End Sub
Private r As Range
Private r2 As Range
Sub 四角形1_Click()
ゲーム.Show
ゲーム.ActiveControl
ゲーム.Spreadsheet1.Range("C30") = "○"
Set r = ゲーム.Spreadsheet1.Range("C30")
End Sub 'エクセルシート上のボタンをクリックした後、ユーザーフォームを表示させる処理
Sub SetKey()
Application.OnKey "{UP}", "KeyUP"
Application.OnKey "{DOWN}", "KeyDOWN"
Application.OnKey "{LEFT}", "KeyLEFT"
Application.OnKey "{RIGHT}", "KeyRIGHT"
Set r2 = r
End Sub 'キー移動処理'
0934デフォルトの名無しさん
2009/12/21(月) 19:26:40Sub Main()
Dim rng As Range
Set rng = Range("Sheet1!A1")
With rng.Validation
Call .Add(Type:=xlValidateList, Formula1:="Sheet2!A1")
End With
With rng.Offset(1,0).Validation
Call .Add(Type:=xlValidateList, Formula1:="Sheet2!A1:A2")
End With
End Sub
0935デフォルトの名無しさん
2009/12/22(火) 00:09:34間違ってるかもしれんけど ちょっと気になった点を
ゲーム.Show
"ゲーム" ってUserForm名ですよね
たしかこのShowメソッドでは
>ユーザー フォームを非表示にするか、またはアンロードするまで、次のコードは実行されません。
なんだけど Help等確認した?
通常 Show(表示)した後は
UserForm内で処理するのが一般的だとおもうよ
0936デフォルトの名無しさん
2009/12/22(火) 00:37:58Excelの表示行移動は通常、ウインドウの右のスクロールバーをドラッグしたり
して上下に移動しますよね。
それを行数を指定することで移動することは出来ますでしょうか。
例えば、検索はCTRL+Fで検索窓が出てきます。それと同じように
CTRL+○○とすると窓が出てきて、行数を入力してentすると、その行が
画面の真ん中に来る、というイメージです。
VBAで組むというわけできなく、単にExcelの使い方で知りたいのです。
宜しくおねがいします。
0937デフォルトの名無しさん
2009/12/22(火) 00:39:170938デフォルトの名無しさん
2009/12/22(火) 01:51:04まあ代用でCtrl+Gで直接移動かな。画面真ん中には来ないけど。
0939デフォルトの名無しさん
2009/12/22(火) 07:12:03マクロ組めば良いのに
0940デフォルトの名無しさん
2009/12/22(火) 08:00:01やり方は忘れた
0941デフォルトの名無しさん
2009/12/22(火) 08:38:00そうですユーザーフォーム名
確かに実行→停止→実行ってやらないと"○"は表示されませんでした
0942デフォルトの名無しさん
2009/12/24(木) 11:37:17入力されています。これを
T=shtHoge.range("B1" ).value
という具合にデータにVBAでアクセスすると
シリアル値がでてきます。(Double型として認識される)
12:00という文字列で表示することはできないのでしょうか?
いろいろやってみたのですができません
だれかわかる人いますか
0943デフォルトの名無しさん
2009/12/24(木) 13:37:56T = shtHoge.range("B1" ).Text
0944デフォルトの名無しさん
2009/12/24(木) 20:42:59しかし、VB.NETからEXCELシートのアクセスすると
.Textがないのです。どういたものか・・・・
0945デフォルトの名無しさん
2009/12/24(木) 21:13:06format関数とかはどう?
0946デフォルトの名無しさん
2009/12/24(木) 23:03:03Excel2003で Sendkeys "AAA+1500"と入力したいのですが
結果は"AAA!500"になります。
"Shift+1"→"!" の回避方法はご存知でしょうか?
わかる人がいればお願いします。
0947デフォルトの名無しさん
2009/12/24(木) 23:10:050949デフォルトの名無しさん
2009/12/25(金) 04:41:09Value2を取得すればいけるんじゃね?
今ふとんの中からもしもしだから自信ないけど。
0950デフォルトの名無しさん
2009/12/26(土) 09:58:18VB.NETのオートコンプリートがないだけでした。textでやればいけました。
お騒がせしました。
0951デフォルトの名無しさん
2009/12/26(土) 21:19:01追加してセルを選択するにはどうすればよろしいっすか?
0952951
2009/12/26(土) 21:42:370953デフォルトの名無しさん
2009/12/26(土) 21:44:27コントロールキーを押しながらクリック又はドラッグ
0954デフォルトの名無しさん
2009/12/26(土) 22:20:02いやそれをVBAでやる方法だろ
0955sage
2009/12/27(日) 12:24:20作成はマクロで出来ますでしょうか?
0956955
2009/12/27(日) 13:19:21Range(cells(1,1),cells(10000,500))の範囲を3D等高線グラフにしたいん
ですが、(option base 1⇒) A(10000,500)の配列変数を利用して3D等高線
グラフを作成したいと思っています。
方法があれば教えて下さい。あと、こんな事しても表示までの時間は速く
ならない?ですか?
0957デフォルトの名無しさん
2009/12/27(日) 15:33:23できない
0958955
2009/12/27(日) 17:50:48セル参照で進めます。
0959デフォルトの名無しさん
2009/12/27(日) 19:18:15たとえば、指定のセルにコメント表示で
山田 100個とコメントに表示はできますが
ここにコメントを追加して、高木 250個というコメントを追記して
山田 100個
高木 250個
とコメントを表示したい場合はどうすればいいのでしょうか?
0960デフォルトの名無しさん
2009/12/27(日) 19:21:26できるよ
aが配列だとして
ActiveChart.SeriesCollection(1).Values = a
とかやると、配列が元データになる
画面表示は大変なことになるけど・・・
0961デフォルトの名無しさん
2009/12/27(日) 20:05:19素人ですが
Range("A1").Comment.Text Text:=Range("A1").Comment.Text & "高木 250個"
でどうでしょう
0962デフォルトの名無しさん
2009/12/27(日) 20:14:39' Macro1 Macro
'
Range("E7").Select
Range("E7").Comment.Text Text:="******:" & Chr(10) & "山田 100個" & Chr(10) & "高木 250個" & Chr(10) & ""
Range("E8").Select
End Sub
マクロの記録でこんなのが出来たから、必要な部分を追加すれば良いだけでは?
0963デフォルトの名無しさん
2009/12/27(日) 21:06:190964デフォルトの名無しさん
2009/12/27(日) 23:53:41追記だけなら
正しい使い方かどうかは知らんけど こういう方法もあったりする
Range("A1").Comment.Text Start:=9999, Overwrite:=0, Text:=Chr(10) & "高木 250個"
0965デフォルトの名無しさん
2009/12/30(水) 00:31:04曜日を抜き出して処理をしたいのですが
うまく取得できません。
ぐぐってもdateを使ってそこから曜日を取得するようなものばかりです。
あらかじめセルに1月1日(月) みたいに入力されているところから
曜日を取得したいと思っています。
Dim a As data
a = ("A1")
Range("A2") = Weekday(a)
Range("A3") = WeekdayName(Weekday(a))
よろしくお願いします。
0966デフォルトの名無しさん
2009/12/30(水) 07:44:37MsgBox Format(Range("A1").Value, "aaaa") & " or " & Format(Range("A1").Value, "aaa")
0967デフォルトの名無しさん
2009/12/30(水) 13:01:19文字列として 1月1日(月) が 入力されているなら
ActiveSheet.Range("A3").Value = Left(Right(ActiveSheet.Range("A1").Value, 2), 1)
と するとか
0968デフォルトの名無しさん
2009/12/31(木) 02:19:36その後、何とかできたのでよかったなぁと思っています。
0969デフォルトの名無しさん
2009/12/31(木) 23:18:45マクロに割り当てているのですが、
この命令を同じエクセル内で本来の使い方(CTRL+Cのコピー)ができるように戻す方法はないのでしょうか?
0970デフォルトの名無しさん
2010/01/01(金) 07:21:49どんな訳か知らないけど、マクロ割り当てるのは Ctrl+Shift+キー にしようぜ。
0971デフォルトの名無しさん
2010/01/01(金) 07:38:44001〜200の値をFor Nextで繰り返したいのですが、
001〜099までが繰り返せません。
今は以下の様に00+(1〜9)、0+(10〜99)、100〜200に分けているのですが、
For i1 = 1 To 9
A = "00" & i1
Next i1
For i2 = 10 To 99
B = "0" & i2
Next i2
For i3 = 100 To 999
C = i3
Next i3
これを一括で処理することは可能でしょうか?
0972デフォルトの名無しさん
2010/01/01(金) 07:57:00Sub test()
Dim i As Integer
For i = 1 To 200
Debug.Print Right("00" & CStr(i), 3)
Next i
End Sub
0973デフォルトの名無しさん
2010/01/01(金) 09:18:10ありがとうございます。出来ました。
0974デフォルトの名無しさん
2010/01/01(金) 23:28:41数字とマイナスのみの場合はどうやればいいでしょうか?
0975デフォルトの名無しさん
2010/01/02(土) 14:25:530976デフォルトの名無しさん
2010/01/02(土) 14:49:110977デフォルトの名無しさん
2010/01/02(土) 14:55:48やるとすればどのように実現するのでしょうか?
0978デフォルトの名無しさん
2010/01/02(土) 15:11:09問題は書き込み実行だね
データを直で送るにしろテキスト入力にしろ串使う際のラグをどうやって処理するかだかねえ
思いつきだけどページからソースデータ抜き出して、最後部にある定型文言と合致判定を使うとか出来そうだな
XML制御したほうがいいとは思うけど
0979デフォルトの名無しさん
2010/01/02(土) 15:30:26ほかの言語でやったほうが楽じゃね?
本文と数行のスクリプト用意すればできるから。
0980デフォルトの名無しさん
2010/01/02(土) 15:30:460981デフォルトの名無しさん
2010/01/03(日) 23:45:15特定の文字の前後どちらでも良いので、
指定した文字の前後どちらかにカーソルを挿入
するマクロを作りたいと思います。
そこであれこれ調べましたが結局分からず困っています。
宜しくお願い致します。
0982デフォルトの名無しさん
2010/01/04(月) 00:10:340983デフォルトの名無しさん
2010/01/04(月) 00:20:15そのcとdの間みたいにカーソルとかは無理と思うけど
0984デフォルトの名無しさん
2010/01/04(月) 00:24:580985デフォルトの名無しさん
2010/01/04(月) 00:34:59どうだっけな
0986デフォルトの名無しさん
2010/01/04(月) 08:04:37sendkeysで出来ました
cells(1,1)に0123456789と合って
4と5の間にカーソルを置きたい場合は
Sub test()
Cells(1, 1).Select
SendKeys "{F2}"
For i = 1 To 5
SendKeys "{LEFT}"
Next i
End Sub
もっと良い方法がありそうな
0987デフォルトの名無しさん
2010/01/04(月) 10:56:34できるんじゃね?
#意味ねーと思うけどw
0988デフォルトの名無しさん
2010/01/04(月) 23:34:06感謝です!!!
>>982
sendkeyなるものを始めて知りました。
これで何とかなりそうです。
有難うございます。
>>986
これで問題は解決しました。
今まで数百会った煩わしい作業が一気に楽になります。
本当にわざわざコードまで考えて頂き感謝です。
僕の頭では一生考えても無理でした。
本当に有難うございます!
0989デフォルトの名無しさん
2010/01/05(火) 01:52:39具体的には、テキストボックスに0.01〜5.00以内の入力をさせて、それ以外の入力(3.564みたいに小数点3位以下)はNGみたいにさせたいんだが。
0990デフォルトの名無しさん
2010/01/05(火) 02:54:13len関数 isnumeric関数 instr関数の複合でチェック出来そうだけど他の方法あれば後学のためにも教えてください。
0991デフォルトの名無しさん
2010/01/05(火) 03:55:18100倍して切捨てして比較するとか。
int(n * 100) = (n * 100)
0992デフォルトの名無しさん
2010/01/05(火) 07:04:190993デフォルトの名無しさん
2010/01/05(火) 13:44:120994デフォルトの名無しさん
2010/01/06(水) 06:07:09お前の事だ
脳味噌のレベルが低いって事
0995デフォルトの名無しさん
2010/01/06(水) 09:04:01VBAからWindows(DOS)にシステムコール(DIR)して、カレントフォルダーに存在する
全てのファイル名を得て、結果をセルに表示させたいのですが、
システムコールって可能なんですか?
0996デフォルトの名無しさん
2010/01/06(水) 09:21:420997デフォルトの名無しさん
2010/01/06(水) 09:38:10そうなんですか?
自分はDOSしか知らず、仕事で長年WINDOWSは使ってましたが
メールくらいしかやりません、本日はじめて自動マクロを経験しました、
ヘルプで調べてもよく分かりません・・・
今まで必要に応じて専用ツールを作ってくれていた事務の女の子がいましたが、
暮れに辞めてしまって、新年から仕事が回らずてんてこ舞い状態です。
0998996
2010/01/06(水) 09:56:20Sub Sample1()
Dim i As Long, buf As String
Const Path As String = "C:\Work\"
buf = Dir(Path & "*.*")
Do While buf <> ""
i = i + 1
Cells(i, 1) = buf
buf = Dir()
Loop
End Sub
Sub Sample2()
Dim i As Long, FSO As Object, f As Object
Const Path As String = "C:\Work\"
Set FSO = CreateObject("Scripting.FileSystemObject")
MsgBox "全部で" & FSO.GetFolder(Path).Files.Count & _
"個のファイルがあります"
For Each f In FSO.GetFolder(Path).Files
i = i + 1
Cells(i, 1) = f.Name
Next f
Set FSO = Nothing
End Sub
0999デフォルトの名無しさん
2010/01/06(水) 10:30:25どうもすみません。
早速、自分のエクセルプロジェクトにコピーして検証&調整してみます、
WINDOWS系は難しいですね、DOSは楽でした(遠い目)
昔は、DIRをリダイレクトするバッチを実行すれば良かったんですが
WINDOWSになってから全然ついていけなくなってしまって・・・
実は、今週末に部長に提出する資料の為に必要な機能なんですよ、
助かりました、本当に有難うございました。
1000デフォルトの名無しさん
2010/01/06(水) 10:32:00それと998さん、本当に本当に有難う御座いました。
10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。