Excel VBA質問スレ Pa ..
[2ch|▼Menu]
2:デフォルトの名無しさん
09/09/30 13:09:23
ExcelのVBAに関する質問スレです

前スレ スレリンク(tech板)

★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)

3:デフォルトの名無しさん
09/09/30 13:12:29
いちおつ。

前スレ
Sleep 1
の1はミリ秒だから、1秒なら1000を指定ね。

4:デフォルトの名無しさん
09/09/30 17:22:10
2003のExcelで作成したVBAが出向先の2007のExcelでは期待した動作をしませんでした。
どのようにコードを書き直せばよいのでしょうか教えてください。

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書き込みで失礼があるかもしれませんが、どうかお力を貸してください

5:デフォルトの名無しさん
09/09/30 18:04:28
>>4
OSとIEのバージョンは、どっちの環境でもXP SP3にIE8で同じ?

6:デフォルトの名無しさん
09/09/30 18:15:07
>>5
はい,どちらもXP SP3 IE8です。

7:デフォルトの名無しさん
09/09/30 18:26:52
>>6
キー入力の前に、ちゃんとページの表示が完了するまで待つようになってる?

8:デフォルトの名無しさん
09/09/30 18:42:46
そのつもりです。 表示完了の問題かと思い、
Sub 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
をダイアログが開く前後に入れて色々チェックをしてみたのですが開いたダイアログにはカーソルが行くだけで値が入りません。
値が入ってから消えているわけではないようです。

9:デフォルトの名無しさん
09/09/30 19:42:08
手作業ではちゃんとできるのか?
手作業と同じようにやってるのか?

10:デフォルトの名無しさん
09/09/30 19:55:58
>9
手作業ではできますし、手作業同様の指示をだしているつもりです。
ダイアログが開くまでは期待通りの動きをしています。
Select以降にwaitを15秒とってもダイアログには何も記入されません。


11:デフォルトの名無しさん
09/10/01 16:12:31
>>5 >>6 >>9 の方へ
自社で2007をインストールして試したところ、vbaはきちんと動きました。
verの問題ではなかったようです。今のところ何か常駐ソフト等が原因なのではと考えています。
ありがとうございました。


12:デフォルトの名無しさん
09/10/01 20:17:45
OS XP
SOFT EXCEL2007

1つのブックに300近いシートがあり、これを串刺し演算したいです
しかしピボットテーブルを使おうと思っても4シートしか串刺しできません
vbaではとんでもない行数になると思います
こういう場合どうすればいいかヒントを下さい

13:デフォルトの名無しさん
09/10/01 20:26:15
>>12
たとえばシートが300枚あったとして、全シートのセルA1の合計ならこういう式
=SUM(Sheet1:Sheet300!A1)
で一発で求められるけど、それ以外にどういう計算をしたい?

14:デフォルトの名無しさん
09/10/01 21:30:24
>>13
情報は商品番号(100種以上)と数量だけなんですが商品番号がランダムに並んでるんです
串刺ししつつ商品の合計を出したいのです

そんなのできますか?


15:デフォルトの名無しさん
09/10/01 21:50:36
【1 OSの種類         .】 Windows XP P
【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 したいのですがどのようにすればよいですか?
教えてください。よろしくお願いします。


16:デフォルトの名無しさん
09/10/01 21:52:18
作業列使うとか条件式使うとかわずらわしくなるけど出来ないこともない
現状の体裁を変えないならVBAでも変数に格納するなり
出来ることは出来る

17:デフォルトの名無しさん
09/10/01 22:00:37
>>14
複数のシートタブをShiftを押しながら指定する方法だと4枚までしか集計できない。
それじゃなくて、ピボットテーブルウィザードから「範囲の追加」を使えば
300枚のシートに別れたデータをいっぺんに集計できるようにはなる。
URLリンク(office.microsoft.com)

けど、入力にめっちゃ手間がかかる。
VBAでピボットテーブルを作るのが早いと思う。

18:デフォルトの名無しさん
09/10/01 22:25:37
>>17
ありがとうございます
頑張ってみます。

19:デフォルトの名無しさん
09/10/02 00:03:19
WindowsXP Excel2000

Sheet1に列固定、行不定の約10000行ほどのデータを加工して
Sheet2に表示させたいのですが、馬鹿正直にfor文とかでまわして
セルに格納していってたら、処理速度がえらいことになりました。
非表示や再計算を手動化等やってみたのですが、やはりまだまだ遅いです。
何か良い案は無いでしょうか?よろしくお願いいたします。

20:デフォルトの名無しさん
09/10/02 00:09:01
セル格納は配列が協力

配列(myRow,0) とか作って、
range("B1:B" & myRow) = 配列  ←配列(,)じゃ無くて括弧なしの「配列」
で超高速

21:デフォルトの名無しさん
09/10/02 00:14:40
>>20
ご教示ありがとうございます。
カッコ無しの配列ですね。試してみます!

22:デフォルトの名無しさん
09/10/02 00:27:58
for myRow = 0 to 行 -1
配列(myRow,0) = cells(myRow,2) ' 配列にB列のセルを格納
next

こうやって格納した後にだな、いちおう

23:デフォルトの名無しさん
09/10/02 02:12:29
>>20,22様
処理速度を10分の1程度まで落とすことができました!
あとはデータ加工部分での処理等をもっと軽くできないかやってみます。
アドバイス、ありがとうございました。

24:デフォルトの名無しさん
09/10/02 04:46:07
>>22
全然違う。
セル2個以上の範囲のValueプロパティは2次元配列なので、それをVariant型変数に格納してからアクセスすればよい。

25:19
09/10/02 06:46:59
>>24
私が現在行っている方法で問題がある場所があればご指摘ください。※重要な場所のみ記載します
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


26:デフォルトの名無しさん
09/10/02 06:49:58
ReDim C(datasize - 1, 56)は
この例ではReDim C(myRow - 1, 10)の間違いでした。失礼しました。

27:デフォルトの名無しさん
09/10/02 07:45:50
最近質問や回答がまともなのが多いな。
いいことだ。

28:デフォルトの名無しさん
09/10/02 08:46:13
Yahooオークションの入札履歴から
落札者と入札額の取得をしエクセルのセルに書き込もうと考えています。

WEBクエリを使ったところ 何回か動かすと
真っ白い画面になって まったく取得できなくなります。

試しにIEなどブラウザで開いてみると 特に問題なくページを開くことができます。
真っ白にならないいい方法はありますでしょうか・・・?

OSは XP でIE8 Office2007
と Vista IE8 Office2007

を使用しています。

29:デフォルトの名無しさん
09/10/02 08:47:55
取得部分を抜粋します。
AuctionPageID = "URLリンク(page.auctions.yahoo.co.jp)" & 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
どうぞよろしくお願い致します。

30:デフォルトの名無しさん
09/10/02 17:59:53
HPが開けないトラブルって言うのは大抵がデータを読み込む前に処理を行うからなんだけど
5秒くらい待機したら問題ないことがある

31:デフォルトの名無しさん
09/10/02 19:06:29
全くの素人ならExcel vbaとACCESSvbaのどちらが取っ付きやすいですか?


32:デフォルトの名無しさん
09/10/02 19:12:54
EXCEL
ACCはレコードアクセスが基本になる上、ADOだとか使う必要がある

33:デフォルトの名無しさん
09/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での表現法がわかりません。
 


34:デフォルトの名無しさん
09/10/02 21:49:53
数式でもいいの?
それともVBAを使うことが目的なの?

このケースだとかなり基本的なことから説明しなくちゃだから、後者なら大変なんだが

35:デフォルトの名無しさん
09/10/02 22:04:00
>>34
後者です。
VBAでの答えをよろしくお願いします。
説明は大変ということなのでいりません。
VBAの本があるのでそれで調べて見ます。

本当に知りたいのはVBAで、
IFで真のときにさらにもう一回IFで違う条件でかける方法です。

36:デフォルトの名無しさん
09/10/02 22:16:58
>>33
「”〜かつ〜”のVBAでの表現法」とのことですので、下のサンプルを参考にしてください。

Sub msgTest()
' セルA1に「メッセージ」かつ、B1に「表示する」と入力されている場合にメッセージ表示。
If (Cells(1, 1).Value = "メッセージ") And (Cells(1, 2).Value = "表示する") Then
MsgBox "2条件とも満たしている"
End If
End Sub

37:デフォルトの名無しさん
09/10/02 22:43:04
>>35
演算子で繋いでも良いけど、ネスティングで良いと思うよ。

if a = 1 then
if b = 1 then
if c = 1 then
msgbox "aaa"
end if
end if
end if



38:デフォルトの名無しさん
09/10/02 23:27:12
>33
★5 レベルはどうあれ、ここはプログラマ用の板スレです。プログラマとは、自分でプログラムを組み
   コードを書く人の事なので、自分でやるきは全く無く、丸投げしようって人はお断りです。
   ヒントを貰えばあとは自力でなんとかしますって人のみどうぞ。

丸投げならEXCEL相談室へどうぞ
その前に、CELLSの使い方の再確認を
URLリンク(www.happy2-island.com)

39:デフォルトの名無しさん
09/10/03 00:50:56
ヘルプの使い方をテンプレに入れたらdat落ちだな

40:デフォルトの名無しさん
09/10/03 03:04:59
>>37
演算子でつなげるものと同じ意味のIfネストは、なんだか格好悪いよね。


41:デフォルトの名無しさん
09/10/03 03:06:40
VBAって短絡評価が無いからIfネストの方がパフォーマンスが良かったりうんぬん

42:デフォルトの名無しさん
09/10/03 07:50:07
>>36
>>37
ありがとうございました。


43:デフォルトの名無しさん
09/10/03 08:49:12
コードが冗長になってくると、一括判定が必要な演算子連結よりもネスト構造のほうが優れているとかなんとか

44:デフォルトの名無しさん
09/10/03 10:29:10
Ifネストは行単位で追加や削除ができるから改変しやすい
条件を外したいときは先頭に ' 入れてコメントにすればいいだけだし、
動作テストで条件を変えて試したい時とかよく使う

45:デフォルトの名無しさん
09/10/03 11:18:50
And使うのは俺的にはIfのネストより不細工だと思うけど、人によっては綺麗だと感じる人いるみたいね。

そういえば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が速いんだけどな。



46:デフォルトの名無しさん
09/10/03 11:38:11
>>45
どのくら速かった?

47:デフォルトの名無しさん
09/10/03 12:28:15
ま〜た、速度厨か




48:デフォルトの名無しさん
09/10/03 12:53:42
ショートサーキットがあればねぇ。

あとVBAって、右辺だけの演算子結合出来ないよね?確か。

if a=1 or a=2 or a=3 then
だよね、確か。

if a=1 or 2 or 3 then
でエラー吐き出して、最初のころ原因が分からなくて相当悩んだ記憶が。

49:デフォルトの名無しさん
09/10/03 13:54:45
馬鹿?

50:デフォルトの名無しさん
09/10/03 14:48:26
Sub MonthChk(Month as Integer)
If 0 < Month <=12 then
Debug.Print Month
Else
Debug.Print False
End If
End Sub

51:デフォルトの名無しさん
09/10/03 16:41:50
>>48
>if a=1 or 2 or 3 then
>でエラー吐き出して、最初のころ原因が分からなくて相当悩んだ記憶が。

本当にエラー吐いたの?、その条件だとa=1が真でも偽でも2と3が真だから
必ず真になってエラーにはならないと思うけど・・・

52:デフォルトの名無しさん
09/10/03 17:46:54
文法くらい作法に従って書けよ
それで動くと思ってるのは他の言語も経験したことないんだろ?
クラス継承ができないとか、ポインタ使えないとか範囲コメントできないとかならともかく・・・

53:デフォルトの名無しさん
09/10/03 19:57:28
いや、コード書いてシステム動かすのが前提なんだから、ある程度速度を求めるのは当然だろう
速度厨とか何を言ってるんだ

54:デフォルトの名無しさん
09/10/03 19:59:36
VB.NETにはショートサーキットする演算子が追加されてるから、そのうちVBAにも追加されるかもしれん
個人的にはショートサーキットの有無で結果の変わるようなコーディングは避けるべきだと思う

>>51
俺は>48ではないが
昔のVBAだと確かエラーになってた気がするんだが
今エクセルの2007で試したらエラーにならないな

まあ、>48が思ってる通りには評価されてないんだが

55:デフォルトの名無しさん
09/10/03 21:09:02
よろしくお願いします。この場合XLSM形式で保存する場合はどこに&”.xlsm”を書き足したらいいのですか?


If 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

56:デフォルトの名無しさん
09/10/03 21:47:02
マクロの記録、がためになるよ

57:デフォルトの名無しさん
09/10/04 06:15:54
Office 2010から、VBA.netにならないんですか?

58:デフォルトの名無しさん
09/10/04 06:27:10
>>55
If 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


59:デフォルトの名無しさん
09/10/04 09:29:33
XP&2003です。

フォーム上のテキストボックスの数を数えるには、
どのようにすればよいでしょうか。

Controlsの引数は"名前"と"番号"なので種類が指定できないし、
GettypeはVBAでは使えないようで悩んでいます。

60:デフォルトの名無しさん
09/10/04 11:31:23
>>59
TypeName 使ってみてはどうですか

61:59
09/10/04 13:45:27
>>60
できましたぁぁぁぁぁぁ
ありがとうございましたぁぁぁぁぁ!!!

62:デフォルトの名無しさん
09/10/04 21:10:56
こんばんは。
VBAを始めたばかりで、全然わからないので、
ここで質問させてください!!

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

63:デフォルトの名無しさん
09/10/04 21:26:33
forで上から順番に判定させるのが分かりやすいと思うよ。

for i = 1 to cells(65536,1).end(xlup).row
 if cells(i,1).value = "りんご" then
  'コピペ処理
 end if
next

64:デフォルトの名無しさん
09/10/04 22:31:45
>63さん
ありがとうございます!!
早速やってみたんですが、
「プロシージャの呼び出し、または引数が不正です」とエラーが
出てしまいました。。。
なぜでしょう。。。

Columns(1).Find("りんご")…

というところでエラーが出てるっぽいです。

65:デフォルトの名無しさん
09/10/04 22:52:55
>>62
Columns(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列に"貼り付け用"と記入されたセルが存在しないんじゃないの

66:デフォルトの名無しさん
09/10/04 22:59:56
>>65
解決しました!!65さんの言っているとおりでした!

すいません。私が書いてなかったのが悪かったんですが、
"貼り付け用"というセルは表の一番下にあるんです。

一度"りんご"のセルがあって、実行されちゃうと、
もう"貼り付け用"というセルがなくなってしまうことが原因でした!

なので、Forを一番下から上にあがるような構文を書いたら
エラーが出なくなりました!

ありがとうございました!!

67:デフォルトの名無しさん
09/10/04 23:15:00
62です。

もう一つ教えてもらってもいいですか?
もし"りんご"というセルがなかったら、
"貼り付け用"と書かれたセルとその隣のセルを削除したいのですが、
どのように書けばいいですか?

elseを使うんだろうなぁと思って、

  Else
  Columns(1).Find("貼り付け用").Resize(, 2).Delete shift:=xlShiftUp

を入れてみたんですが、エラーになっちゃいました。。。

お時間があれば教えてください!よろしくお願いします。


68:デフォルトの名無しさん
09/10/04 23:19:19
あとは自力で頑張れよ・・・

69:デフォルトの名無しさん
09/10/05 00:11:51
そんなこといわずにもう一息っ!

70:デフォルトの名無しさん
09/10/05 00:19:37
俺はfindの時にはsetを使ってるんだけど、説明するのも大変そうだなぁ・・・。

見つかりませんってエラーが出るんだから、on error goto で飛ばしたら?

71:デフォルトの名無しさん
09/10/05 00:56:27
>>67
> 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

72:デフォルトの名無しさん
09/10/05 01:10:09
>>54
エクセル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の条件式は必ず真になるでしょ

73:デフォルトの名無しさん
09/10/05 01:26:21
最初の設計がだめなんじゃないの?

りんごが無かったら削除するんじゃなくて
りんごがあったら追加する仕様の方がいい希ガス

74:デフォルトの名無しさん
09/10/05 01:30:23
?a=1 or 2 or 3
3

3と計算されるね

75:デフォルトの名無しさん
09/10/05 02:06:50
え?

76:デフォルトの名無しさん
09/10/05 03:18:19
λ

77:デフォルトの名無しさん
09/10/05 11:59:57
>>74
Dim a
a = 1
MsgBox a = 1 Or 2 Or 3
これ、たしか最初は3になったはずだが、今は-1にしかならん。
おれの記憶違いかな?

それにしても
MsgBox 1 Or 2 Or 3 Or 4
これが7になるのはどうして?

78:77
09/10/05 12:04:44
自己レスだが7になる理由は分った。

79:デフォルトの名無しさん
09/10/05 12:44:27
>>36はプログラマとして優秀さを感じるな
>>38は人の程度が知れる

80:デフォルトの名無しさん
09/10/05 13:11:30
(;゚д゚)ァ

81:デフォルトの名無しさん
09/10/05 14:19:24
>>77
とりあえず 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

82:デフォルトの名無しさん
09/10/05 16:16:05
>>81
>>78書いた時点で分ってるよ。

83:デフォルトの名無しさん
09/10/05 16:39:52
>>81
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 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の演算が行われる

84:デフォルトの名無しさん
09/10/05 17:23:56
>>81
こまったことに2007のエクセルのヘルプには論理演算子と書いてあるんだがな
実際は論理演算も算術演算も区別がない。全部算術演算してる

問題の本質は、算術演算か論理演算かじゃなくて、型の優先順位の問題

Orで型が一致しない場合、booleanより他の型の方が優先順位が高い
おそらくこの式ならIntegerで値が帰っている
もしbooleanの方が優先順位が高ければ、2と3がbooleanに変換されるので
a = 1 Or 2 Or 3 ⇒ a = 1 Or True Or True ⇒ True
True=-1なので、常に-1が帰るはず


型がいい加減な言語の弊害だな


85:デフォルトの名無しさん
09/10/05 17:45:45
ビット演算の便利な使い方のケースってどんなものある?

86:デフォルトの名無しさん
09/10/05 17:52:54
>>85
一般論で言えばBoolean型の配列よりはビット演算の方がメモリが節約できてキャッシュの使用効率が上がるし
条件判断も高速になる。
可読性は落ちるけど昔からよく使われる手法だから、知ってないと人のソースが読めなかったりする。

87:デフォルトの名無しさん
09/10/05 19:49:26
vbsの質問ってここでいいですか?

88:デフォルトの名無しさん
09/10/05 20:24:16
vbaから呼ぶならある程度は良いと思うけど。個人的に。

89:デフォルトの名無しさん
09/10/05 20:31:15
vbaとあまり関係ないので別スレで質問してみます

90:デフォルトの名無しさん
09/10/05 20:31:50
>まぁ今時はコンパイラが大分やってくれるから高級言語ならあまり関係ないけど
組込とかで機械語表記するときゃ今でも普通に使うよ
ハードに近づけば近づくほど限界性能を引き出せるけど分かりにくくなる
とりあえずVBAって時点で、変な表記はせずに可読性に特化したコードを書くべきだと思う

91:デフォルトの名無しさん
09/10/05 20:38:55
速度厨はその辺が気に食わないみたいで

92:デフォルトの名無しさん
09/10/05 20:43:24
VBAに速度求めてもな。
手作業の自動化くらいに使ってりゃいいんだよ。自分でやるより早いだろ。

93:デフォルトの名無しさん
09/10/05 21:02:07
>>85
ハード叩くときの設定なんかで使う
#ドライバー作る時なんかに必要なときがある(あまりいないと思うけど)

94:デフォルトの名無しさん
09/10/05 21:19:46
VBAでドライバ作るやつはいないだろ
VBAでビット演算を使って便利なケースを語れ

95:デフォルトの名無しさん
09/10/05 21:23:14
ビット演算の宿題が出たとき

96:デフォルトの名無しさん
09/10/05 21:35:17
>>94
フォームやシート上にcheckboxが多数ある場合のON/OFF判定とかは?

97:デフォルトの名無しさん
09/10/06 02:16:02
それにしても SQL に bit 演算ないのは理不尽だよなぁ

98:デフォルトの名無しさん
09/10/06 02:24:59
んなこたない

99:デフォルトの名無しさん
09/10/06 02:40:06
あるの?

100:デフォルトの名無しさん
09/10/06 06:53:07
奇数かどうかを判定するのにビット演算使ってみたが12%しか速くならんね。
If i Mod 2 = 1 Then

If i And 1 Then

偶数かどうかを比較したらビット演算が45%速かった。
If i Mod 2 = 0 Then

If i And 0 Then

101:100
09/10/06 06:58:23
すまん、偶数かどうかの比較はまちがってるな。

102:デフォルトの名無しさん
09/10/06 07:11:08
ちなみに偶数かどうかは
If j And 1 = 0 Then

103:デフォルトの名無しさん
09/10/06 07:34:47
If not (i And 1) Then

104:デフォルトの名無しさん
09/10/06 07:50:32
>>103
それも書こうと思ったが、たしかにその方が少し速いね。

105:デフォルトの名無しさん
09/10/06 07:51:33
背伸びしてビット演算するレベルじゃないな。

106:デフォルトの名無しさん
09/10/06 07:54:49
ループの回数を多くして計りなおしたら>>102の方が速かったわ。

107:デフォルトの名無しさん
09/10/06 07:56:12
その程度は普通はMod使うよなぁ。

108:デフォルトの名無しさん
09/10/06 08:02:23
WorksheetFunction.IsEvenを使う俺様は最強





















じゃねーな。最低だ。

109:デフォルトの名無しさん
09/10/06 08:15:34
>>108
よく見る似たような最低なものにWorksheetFunction.IsNumberがある。
他にもあったな。

110:デフォルトの名無しさん
09/10/06 08:29:22
質問スレがヲタスレ化してる・・・

111:デフォルトの名無しさん
09/10/06 09:39:21
速度厨はアセンブラでもやっとけ、アフォ

112:デフォルトの名無しさん
09/10/06 09:42:03
>>100
奇数の判定はこれでいいんじゃないか?
If i Mod 2 Then

113:デフォルトの名無しさん
09/10/06 09:45:17
俺は速度をことさら求めない派だが、やたら速度を否定するやつのソースって汚いのが多いよな。

114:デフォルトの名無しさん
09/10/06 09:51:38
>>112
普通はModだが、Andでビット演算で判定すればほんの少し速くなるって話だろ? 

115:デフォルトの名無しさん
09/10/06 09:59:37
>>113
お前の美しいソースを見てみたいもんだな。


116:デフォルトの名無しさん
09/10/06 10:07:27
こんにちは。あたしはカウガール。
AAとして成り上がるため、スレを巡る旅をしています。
    __
  ヽ|__|ノ    モォ
  ||‘‐‘||レ   _)_, ―‐ 、
  /(Y (ヽ_ /・ ヽ     ̄ヽ
  ∠_ゝ  ` ^ヽ ノ.::::::__( ノヽ
   _/ヽ      /ヽ ̄ ̄/ヽ

117:デフォルトの名無しさん
09/10/06 10:27:45
>>114
いやそうじゃなくて「= 1」という比較演算が無駄じゃないかって指摘。
このおかげで遅くなってる希ガス

If i Mod 2 = 1 Then
と比較するなら
If i And 1 = 1 Then
とするべきだろうし、

If i And 1 Then
に書き方を合わせるなら
If i Mod 2 Then
と比較しないと不公平じゃないかなーって思った。それだけ。

118:デフォルトの名無しさん
09/10/06 10:35:49
>>117
たしかに公平にやるならそうだよな。
公平にやってもビット演算が少し速いみたいだけど、人に見せるコードならIf i Mod 2 = 1 Then だな。


119:デフォルトの名無しさん
09/10/06 12:31:35
おまえら仕事しろよ

120:デフォルトの名無しさん
09/10/06 19:37:14
速度の事は別スレ建てて、そこでやれ

121:デフォルトの名無しさん
09/10/06 19:50:09
俺はわからなかったよ!

122:デフォルトの名無しさん
09/10/07 02:02:48
お前ら、奇数ってマイナスもありなんだぜ
i Mod 2 = 1 ではマイナスの奇数が判定できない時点で失格

123:デフォルトの名無しさん
09/10/07 03:32:56
何の問題もない
たとえば4bitなら
-1 = 1111
-2 = 1110
-3 = 1101

124:デフォルトの名無しさん
09/10/07 07:11:14
>>123
ー3 mod 2 = 1 になった?

125:デフォルトの名無しさん
09/10/07 07:24:01
yes we can

126:デフォルトの名無しさん
09/10/07 08:52:58
>123

天然w

127:デフォルトの名無しさん
09/10/07 09:11:24
>>122
すみませんねぇ、あいにくマイナス志向じゃないもんでね。
じゃぁIf i Mod 2 <> 0 Thenならあなたのおきにメスでしょうか?

128:デフォルトの名無しさん
09/10/07 09:27:47
ド素人にはよくあることw

129:デフォルトの名無しさん
09/10/07 09:50:25
ちなみに
If i Mod 2 Then
なら負数でも問題ないんだが

130:デフォルトの名無しさん
09/10/07 10:48:04
ー3 mod 2 = 1
が偽になる環境って
ー(3 mod 2) = -1
と解釈されてるんだろ
((ー3) mod 2) = 1
と書けば問題無し

131:デフォルトの名無しさん
09/10/07 11:08:36
>130

天然w

132:デフォルトの名無しさん
09/10/07 11:17:12
Modで盛り上がってるところすみませんが、四捨五入ってVBAに関数ある?
Roundは微妙に違うし。

133:デフォルトの名無しさん
09/10/07 11:24:05
>>132
ない
数式を工夫したり、関数を自作する必要がある
またはWorksheetFunction.Round

134:デフォルトの名無しさん
09/10/07 11:26:43
>>130
キミはまず、とりあえずマイナス記号を入力する方法から勉強しようか

135:デフォルトの名無しさん
09/10/07 11:27:20
は-い(;゚д゚)ァ

136:デフォルトの名無しさん
09/10/07 13:37:07
>>133
一応VBAにもRoundって関数がある
まあ、これ使うと思わぬ結果が出ることもある

自作するなら、基本的には0.5足して切り捨てなんだが
これもマイナスのときどうするか考えると結構じゃまくさい

137:デフォルトの名無しさん
09/10/07 14:13:01
floor

138:デフォルトの名無しさん
09/10/07 15:44:12
>>136
ちゃんと最初から読みなさい
質問者はVBAのRoundではだめなことがわかった上で、どうすればいいか質問してる
VBAのRound関数とワークシート関数のROUNDは機能が異なるのは既知

139:デフォルトの名無しさん
09/10/07 16:17:08
VBAのRoundも立派な四捨五入ですが。

140:デフォルトの名無しさん
09/10/07 16:50:28
URLリンク(q.hatena.ne.jp)
を参考に、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)

141:デフォルトの名無しさん
09/10/07 17:15:52
ExecSQL = rs("NAME").Value

これを変更した?

142:デフォルトの名無しさん
09/10/07 17:19:59
>141
見落としていました。
ありがとうございます。

143:デフォルトの名無しさん
09/10/07 18:14:31
エクセルで指定セル内に文字を入力中、別のセル内にリアルタイムに
バイト数を表示させることはできるのでしょうか。
教えてください、エロい人。

144:デフォルトの名無しさん
09/10/07 18:25:56
>>143
無理

145:デフォルトの名無しさん
09/10/07 18:41:44
すみません。
すごく初歩的なことなんですが、
列が縦でrow、行が横でcolumですよね?
A5だとAが列で5が行ってことになりますよね?
A5セルからA10セルまでをループさせたいときに、
5や10の値の定数をrowみたいな名前で宣言してるのを見たんですが、
これってcolumじゃないんですか??
書籍なので間違いではなさそうなんですが・・・。
A列B列、C列・・・
5行、6行・・・
ですよね?

146:デフォルトの名無しさん
09/10/07 18:50:02
rowが行、colum列
辞書で調べてみ

147:デフォルトの名無しさん
09/10/07 19:12:00
>>139
違うんじゃねーの?
5は捨てたり入れたりだもんな。
Round(1.5)もRound(2.5)も同じだろ?

148:デフォルトの名無しさん
09/10/07 19:29:34
>>145
>>146の方の回答が全てだと思いますが、
下のExcel関数をいくつかのセルで試してみれば、理解しやすいかもしれません。

【関数】
=ROW()   :この関数が入力されている行の行番号を調べます。
=COLUMN() :この関数が入力されている列の列番号を調べます。

149:デフォルトの名無しさん
09/10/07 19:31:05
いやでき・・・どうだろ
ループでバインドするなりキーイベントで捕捉するなり
フォームのTxtボックスとかなら普通に出来るけど、k
セル入力中ってどうだっけ

150:デフォルトの名無しさん
09/10/07 20:49:33
Excel2007

正しい言い方が判らないので上手い事伝わるかどうか…なんですけど。

フォーム上にコマンドボタンを縦に5つ貼りつけています。
エンターキーを叩いた時、初期状態では一番上のボタンのマクロが実行され
ますが、これを3番目のボタンのマクロが実行される様に変えたいです。

テキストボックスとかだったらタブオーダーを設定すれば順番を指定できま
すけど、コマンドボタンについて同一フォーム上で最優先のものを指定する
事出来ますか?


151:デフォルトの名無しさん
09/10/07 20:51:48
>>149
セルはテキストボックスか何かを継承してるはずなんで、
ハンドルさえ取得できればなんとかなる可能性はあるけど、
かなり大変じゃないかと思う。
それにバージョンごとに方法が違ってくると思う。
たぶんだけど2007が一番やりやすそうな気がする。

入力途中のキーイベントはVBAには存在しないので
自前でフックする必要がある。

152:デフォルトの名無しさん
09/10/07 20:54:47
>>150
コマンドボタンにもタブオーダーはあるよ

153:デフォルトの名無しさん
09/10/07 20:58:42
>>145
A1セルの場合
A=横=列=Column
1=縦=行=Row

154:150
09/10/07 21:12:30
>>152
プロパティのTabIndexをいじってみたら希望道理になりました。
どうもお騒がせしました m(_ _)m

155:デフォルトの名無しさん
09/10/07 23:40:36
西暦(2000年以降)年を入力したとき、その1年間の祝日の祝日名、月日及び曜日をイミディエイトウインドウに
表示するプログラムで、サブルーチンプロシージャまたは関数プロシージャを3つ利用しなくてはなりません。

ひたすらサイトを検索したのですが、見つかりませんでした。
全く手が出せず、困っています。どなたか教えてください。よろしくお願いします。




156:デフォルトの名無しさん
09/10/08 00:06:09
155です。
Excel2007を使用しています。

157:デフォルトの名無しさん
09/10/08 00:28:45
>>155
検索すると結構、マクロ、祝日関数あるよね
ダウンロードしてそのソースをみて
考えればいんじゃない
解説してるサイトもあった気がする

158:デフォルトの名無しさん
09/10/08 00:32:56
155です。ありがとうございます。
祝日判定や、日にちを入れて表示させるものは
見つかったのですが、祝日名を表示させるものは
ひとつしか見つからず、ダウンロードしても
マクロは見られませんでした…

159:デフォルトの名無しさん
09/10/08 00:38:20
>>155
祝日名を表示させるコードの一例が載っています。
URLリンク(www.h3.dion.ne.jp)

160:デフォルトの名無しさん
09/10/08 00:45:27
先ほど参照していたのですが、
kt関数は使ったことがなく、わかりませんでした…。


161:デフォルトの名無しさん
09/10/08 01:36:09
>>155
質問の意図がちょっとわからんな。
そういう関数を作れっていう宿題なのか、どこかから手に入れたマクロの使い方を知りたいのか。

ちなみにkt関数は肝心の部分がプロテクトかかってて見えないんじゃなかったっけ?

162:デフォルトの名無しさん
09/10/08 13:09:35
全くの初心者の質問なのですが、
URLリンク(www.matsumae.hokkaido-c.ed.jp)
このサイトにある例13の問題の、
ex13 上の例13のプログラムを参考にして,自然数Nを入力したとき,
Nの約数の個数を求めるプログラムを,次の手順で作れ。
変数sを準備し,N以下の自然数で割り切れたとき,sに1を加える。
これのやり方が全くわかりません。
どなたか簡単に教えてくれないでしょうか。

163:デフォルトの名無しさん
09/10/08 13:45:39
>>162
宿題スレにいけ。ぼけ。

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
松前高等学校のプログラム担当の先生に言っといて。

164:デフォルトの名無しさん
09/10/08 14:11:18
>>163

ありがとうございます。

165:デフォルトの名無しさん
09/10/08 15:16:46
これか
スレリンク(tech板:115-番)


166:デフォルトの名無しさん
09/10/08 16:01:04
>>143
入力したキーのフックに使えるAPI関数があるにはある
SetWindowsHookEx

恒常ループを設定して

多分出来ないんだろうが

167:デフォルトの名無しさん
09/10/08 16:13:28
>>多分出来ないんだろうが

何しに出てきたんだwww

168:デフォルトの名無しさん
09/10/08 17:13:36
>>167
キー入力のバインドは出来るんだろうが、他のセルに書きながら元セルのアクティブどうするかとか、全角や変換どうするんだとか考えたら難しいかなあと
キー入力関係なく、一定時間ごとにセル内容を参照してってのも、入力を確定してないから無理だろうし
セル入力中のデータを捕捉出来れば或いは

169:デフォルトの名無しさん
09/10/08 18:17:21
155です。
学校で授業でやっていて、「テストまでには出来るようにしておけ」
といわれています。
サブルーチンもまだ1度しか使ったことがなく、
マクロを見て理解するのが精一杯の状態です。

170:デフォルトの名無しさん
09/10/08 18:39:53
課題には剥かないよな
休日と振替は法律で決まってるからアルゴリズムまるぱく出来るが、最近は数年で法律改正されてる

171:デフォルトの名無しさん
09/10/08 19:36:09
頭のおかしな人には気をつけましょう
URLリンク(info.2ch.net)

172:デフォルトの名無しさん
09/10/08 19:40:37
なんだ突然

173:デフォルトの名無しさん
09/10/08 19:49:36
Excel2002で3D積み上げ棒グラフを作る方法を教えてください。
URLリンク(terrapy.sakura.ne.jp)


174:デフォルトの名無しさん
09/10/08 20:14:32
>>169
カレンダー関連の処理は簡単に見えて実はかなり難しい。
はっきり言って初心者には無理。

> プロシージャを3つ利用しなくてはなりません。

てのがひっかかるんだけど、
学校が用意したサブルーチンがあって、それを呼び出せって話じゃないの?

175:デフォルトの名無しさん
09/10/08 23:37:56
サブルーチンも別マクロで自分で作らなければなりません…

176:デフォルトの名無しさん
09/10/08 23:46:19
>>175
自分も初心者には少し荷が重い気がするけど

一度に全てやろうとするよりも
一つずつ片付けた方が良いとおもうよ

祝日に関しては内閣府ページ
URLリンク(www8.cao.go.jp)
が参考になると思うんで

どのような処理が必要かまず検討してみたら?

テーブルに1年分(1/1〜12/31)のデータ作成して
それに祝日データを入れていく方法が一番分かり易いんじゃないかな

振替休日の判定とか
休日 平日 休日 → 休日 休日 休日 とする処理とかあるし

177:デフォルトの名無しさん
09/10/09 00:07:41
西暦年を入力→1/1の曜日を求める→出力「元日 1月1日 ○曜日」
→1月第二月曜の日を求める→出力「成人の日 1月○日 月曜日」
…の繰り返しをする、ということしか…

さまざまなサイトに出ている「春分秋分」については、月日は「春分日」「秋分日」、
曜日は「未定」と表示すればよいのですが…

178:デフォルトの名無しさん
09/10/09 00:23:56
2012以上の数字が入力されたら「その年の祝日はまだ決定していません」と表示するのが正解

179:デフォルトの名無しさん
09/10/09 00:26:24
祝日法は数年ごとに改定されてるから、計算で求めようとしてもプログラムが長くなるだけ。
ワークシートか配列に50年分の一覧表を入れておいて、それを表示するだけの方がよっぽどコンパクトで正確。

180:デフォルトの名無しさん
09/10/09 00:36:00
日付が決まっている祝日
第二月曜日など動く祝日
祝日と祝日の間、振替休日

の三つに別けてやるのがこの宿題の正解だな

181:デフォルトの名無しさん
09/10/09 00:37:28
元日 1月1日
成人の日 1月の第2月曜日
建国記念の日 2月11日
春分の日 春分日
昭和の日 4月29日
憲法記念日 5月3日
みどりの日 5月4日
こどもの日 5月5日
海の日 7月の第3月曜日
敬老の日 9月の第3月曜日
秋分の日 秋分日
体育の日 10月の第2月曜日
文化の日 11月3日
勤労感謝の日 11月23日
天皇誕生日 12月23日

について表示できれば良く、改定については考慮しません。


182:デフォルトの名無しさん
09/10/09 00:39:57
祝日を表示したいので、振替休日についても考慮しません。

183:デフォルトの名無しさん
09/10/09 01:13:42
かなり楽に成っちゃったね
ならば、日付が決まっている祝日
第二月曜日、第三月曜の祝日
秋分春分の三つに分けるのが正解かな

184:デフォルトの名無しさん
09/10/09 01:50:01
というか
後出し過ぎ

185:デフォルトの名無しさん
09/10/09 02:38:24
会社の創立記念日とか



186:デフォルトの名無しさん
09/10/09 08:24:30
ム板だよな?ここ・・・

187:デフォルトの名無しさん
09/10/09 08:52:50
そっか今みどりの日だから祝日扱いなんだな

188:デフォルトの名無しさん
09/10/09 21:28:17
質問をさせて下さい。スペックは
Windows2000
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に一括のデータとしてまとめたいです。

名前には重複はありません。日付のみ重複しています。

申し訳ありませんが、よろしくお願いします。


次ページ
最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

4158日前に更新/218 KB
担当:undef