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

Excel VBA 質問スレ Part33

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2013/10/17(木) 22:04:40.64
ExcelのVBAに関する質問スレです

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

前スレ
Excel VBA 質問スレ Part32
http://toro.2ch.net/test/read.cgi/tech/1381151717/

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

コードが嫌な人はこちらのスレへ
http://toro.2ch.net/test/read.cgi/tech/1381151995/l50
0115桃白白 ◆9Jro6YFwm650 2013/12/07(土) 10:02:34.86
>>114
なにもしないってことじゃない。ヌルオブジェクトみたいな。
0116デフォルトの名無しさん2013/12/07(土) 13:00:27.72
呼び出してる前後で想像できないのかよ
想像しろよ、気になるだろ、なんなら聞いてくれよ
ずらっと並ぶ程沢山あるならなおさら
0117デフォルトの名無しさん2013/12/07(土) 14:03:31.00
>>114
コード見てないから分からんけど、
それ、多分ちょっと前にレスがあった
インターフェースだと思うよ。
0118デフォルトの名無しさん2013/12/07(土) 21:05:07.86
IIFってなんて詠むんでしょうか
アイアイエフ?
アイイフ?
2エフ?
0119デフォルトの名無しさん2013/12/07(土) 22:14:16.32
>>118
俺はアイイフと読んでいるけど、多分これには正しい答えはなく、
どれだけ多く世間に浸透しているかが正しいかどうかを決めていると思う。

そんな時はここを参考にするといいかも知れない。

http://shinh.skr.jp/yomikata/
0120デフォルトの名無しさん2013/12/07(土) 22:26:52.30
愛畏怖って読んでます
0121デフォルトの名無しさん2013/12/07(土) 23:34:34.88
>>119
いやおかしいだろそのリンク先w
0122デフォルトの名無しさん2013/12/08(日) 00:33:08.88
>>114
>>117

インターフェースだね。
って言うか前スレで、テーブルの集計を出して欲しいって言われた時
実はそれ使ってコード書いたし。長くなるけど、その時のコードで
説明しようか。
0123デフォルトの名無しさん2013/12/08(日) 00:37:17.54
標準モジュール部
モジュール:Main
Option Explicit

Private mSheetParameterEntity As ISheetParameterEntity

'メイン処理
Public Sub Main(ByVal targetSheet As Worksheet)

Dim factory As New sheetParameterFactory

On Error GoTo Error_Handler

Application.ScreenUpdating = False

Set mSheetParameterEntity = factory.makeSheetParameter(targetSheet)
Call Initialize
Call TableControl.CopyTable
Call SheetControl.Sort
Call TableControl.ReleaseTable
Call SheetControl.MakeSummary
Call SheetControl.SelectCellTopLeft
GoTo Finaly
0124デフォルトの名無しさん2013/12/08(日) 00:38:33.25
Error_Handler:

Call MsgBox(Error)

Finaly:

Application.ScreenUpdating = True

End Sub

'初期化処理
Private Sub Initialize()
Call TableControl.SetSheetParameterEntity(mSheetParameterEntity)
Call SheetControl.SetSheetParameterEntity(mSheetParameterEntity)
Call TableControl.ClearOutLine
Call SheetControl.InitializeSheet
End Sub
0125デフォルトの名無しさん2013/12/08(日) 00:42:50.80
モジュール:SheetControl
Option Explicit

Private Const COPY_CRITERIA_POSITION As String = "B2"
Private mSheetParameterEntity As ISheetParameterEntity

'テーブルパラメタエンティティ格納
Public Sub SetSheetParameterEntity(ByVal value As ISheetParameterEntity)
Set mSheetParameterEntity = value
End Sub

'シート初期化
Public Sub InitializeSheet()
mSheetParameterEntity.GetTargetSheet.Cells.Clear
End Sub

'ソート処理
Public Sub Sort()

Dim sortRange As range

'ソートキーのクリア
mSheetParameterEntity.GetTargetSheet.Sort.SortFields.Clear

'ソートキー追加
For Each sortRange In mSheetParameterEntity.GetTargetSortItem
mSheetParameterEntity.GetTargetSheet.Sort.SortFields.Add Key:=sortRange, _
SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
Next
0126デフォルトの名無しさん2013/12/08(日) 00:44:08.11
'ソート
With mSheetParameterEntity.GetTargetSheet.Sort
.SetRange mSheetParameterEntity.GetTargetRange
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With

End Sub

'集計行の表示
Public Sub MakeSummary()
mSheetParameterEntity.GetTargetRange.Subtotal _
GroupBy:=mSheetParameterEntity.GetGroupColumn, _
Function:=xlSum, _
TotalList:=Array(mSheetParameterEntity.GetTargetSummaryItem), _
Replace:=True, _
PageBreaks:=False, _
SummaryBelowData:=True
End Sub
0127デフォルトの名無しさん2013/12/08(日) 00:45:26.07
'対象の範囲と指定した列により、ソートする列の行範囲を取得
Public Function GetSortRange(ByVal targertSheet As Worksheet, _
ByVal originalRange As range, _
ByVal columnOffset As Long) As range

Set GetSortRange = targertSheet.range(Cells(originalRange.Row, _
originalRange.Column + columnOffset), _
Cells(originalRange.Row + originalRange.Rows.Count - 1, _
originalRange.Column + columnOffset))
End Function

'対象シートの左上セル選択
Public Sub SelectCellTopLeft()
mSheetParameterEntity.GetTargetSheet.Cells(1, 1).Select
End Sub
0128デフォルトの名無しさん2013/12/08(日) 00:47:52.99
モジュール:TableControl
Option Explicit

Private Const COPY_CRITERIA_POSITION As String = "B2"
Private mSheetParameterEntity As ISheetParameterEntity

'テーブルパラメタエンティティ格納
Public Sub SetSheetParameterEntity(ByVal value As ISheetParameterEntity)
Set mSheetParameterEntity = value
End Sub

'テーブルコピー処理
Public Sub CopyTable()
Sheet1.range(COPY_CRITERIA_POSITION).CurrentRegion.Copy
mSheetParameterEntity.GetTargetSheet.range(COPY_CRITERIA_POSITION).PasteSpecial
Application.CutCopyMode = False
'テーブル範囲格納
Call mSheetParameterEntity.SetTargetRange( _
mSheetParameterEntity.GetTargetSheet.range(COPY_CRITERIA_POSITION).CurrentRegion)
End Sub

'アウトラインの解除
Public Sub ClearOutLine()
mSheetParameterEntity.GetTargetSheet.Cells.ClearOutLine
End Sub
0129デフォルトの名無しさん2013/12/08(日) 00:49:12.40
'テーブル解除処理
Public Sub ReleaseTable()

Dim list As ListObject

With mSheetParameterEntity
For Each list In .GetTargetSheet.ListObjects
If list.range.Row = .GetTargetRange.Row And _
list.range.Column = .GetTargetRange.Row And _
list.range.Rows.Count = .GetTargetRange.Rows.Count And _
list.range.Columns.Count = .GetTargetRange.Columns.Count Then
list.Unlist
Exit For
End If
Next
End With

End Sub
0130デフォルトの名無しさん2013/12/08(日) 00:58:17.49
クラスモジュール部
モジュール:ISheetParameterEntity
'対象シート取得
Public Function GetTargetSheet() As Worksheet
End Function

'対象範囲取得
Public Function GetTargetRange() As range
End Function

'対象範囲格納
Public Sub SetTargetRange(ByVal value As range)
End Sub

'対象ソート項目取得
Public Function GetTargetSortItem() As Collection
End Function

'グループ化列取得
Public Function GetGroupColumn() As Integer
End Function

'対象合計項目取得
Public Function GetTargetSummaryItem() As Integer
End Function
0131デフォルトの名無しさん2013/12/08(日) 01:00:28.87
モジュール:Sheet2ParameterEntity
Option Explicit

Implements ISheetParameterEntity

Dim mTargetRange As range
Const SORT_ITEM1 As Long = 0
Const SORT_ITEM2 As Long = 1
Const GROUP_COLUMN As Integer = 2
Const SUMMARY_ITEM As Integer = 3

'対象シート取得
Public Function ISheetParameterEntity_GetTargetSheet() As Worksheet
Set ISheetParameterEntity_GetTargetSheet = Sheet2
End Function

'対象範囲取得
Public Function ISheetParameterEntity_GetTargetRange() As range
Set ISheetParameterEntity_GetTargetRange = mTargetRange
End Function

'対象範囲格納
Public Sub ISheetParameterEntity_SetTargetRange(ByVal value As range)
Set mTargetRange = value
End Sub
0132デフォルトの名無しさん2013/12/08(日) 01:01:16.16
'対象ソート項目取得
Public Function ISheetParameterEntity_GetTargetSortItem() As Collection
Dim sortItemCollecton As New Collection
Dim sortRange As range
Set sortRange = SheetControl.GetSortRange(Sheet2, mTargetRange, SORT_ITEM1)
Call sortItemCollecton.Add(sortRange)
Set sortRange = SheetControl.GetSortRange(Sheet2, mTargetRange, SORT_ITEM2)
Call sortItemCollecton.Add(sortRange)
Set ISheetParameterEntity_GetTargetSortItem = sortItemCollecton
End Function

'グループ化列取得
Public Function ISheetParameterEntity_GetGroupColumn() As Integer
ISheetParameterEntity_GetGroupColumn = GROUP_COLUMN
End Function

'対象合計項目取得
Public Function ISheetParameterEntity_GetTargetSummaryItem() As Integer
ISheetParameterEntity_GetTargetSummaryItem = SUMMARY_ITEM
End Function
0133デフォルトの名無しさん2013/12/08(日) 01:03:07.08
モジュール:Sheet3ParameterEntity
Option Explicit

Implements ISheetParameterEntity

Dim mTargetRange As range
Const SORT_ITEM1 As Long = 3
Const SORT_ITEM2 As Long = 0
Const GROUP_COLUMN As Integer = 4
Const SUMMARY_ITEM As Integer = 3

'対象シート取得
Public Function ISheetParameterEntity_GetTargetSheet() As Worksheet
Set ISheetParameterEntity_GetTargetSheet = Sheet3
End Function

'対象範囲取得
Public Function ISheetParameterEntity_GetTargetRange() As range
Set ISheetParameterEntity_GetTargetRange = mTargetRange
End Function

'対象範囲格納
Public Sub ISheetParameterEntity_SetTargetRange(ByVal value As range)
Set mTargetRange = value
End Sub
0134デフォルトの名無しさん2013/12/08(日) 01:03:56.94
'対象ソート項目取得
Public Function ISheetParameterEntity_GetTargetSortItem() As Collection
Dim sortItemCollecton As New Collection
Dim sortRange As range
Set sortRange = SheetControl.GetSortRange(Sheet3, mTargetRange, SORT_ITEM1)
Call sortItemCollecton.Add(sortRange)
Set sortRange = SheetControl.GetSortRange(Sheet3, mTargetRange, SORT_ITEM2)
Call sortItemCollecton.Add(sortRange)
Set ISheetParameterEntity_GetTargetSortItem = sortItemCollecton
End Function

'グループ化列取得
Public Function ISheetParameterEntity_GetGroupColumn() As Integer
ISheetParameterEntity_GetGroupColumn = GROUP_COLUMN
End Function

'対象合計項目
Public Function ISheetParameterEntity_GetTargetSummaryItem() As Integer
ISheetParameterEntity_GetTargetSummaryItem = SUMMARY_ITEM
End Function
0135デフォルトの名無しさん2013/12/08(日) 01:06:09.64
モジュール:SheetParameterFactory
'対象範囲格納
Public Sub ISheetParameterEntity_SetTargetRange(ByVal value As range)
Set mTargetRange = value
End Sub

'対象ソート項目取得
Public Function ISheetParameterEntity_GetTargetSortItem() As Collection
Dim sortItemCollecton As New Collection
Dim sortRange As range
Set sortRange = SheetControl.GetSortRange(Sheet3, mTargetRange, SORT_ITEM1)
Call sortItemCollecton.Add(sortRange)
Set sortRange = SheetControl.GetSortRange(Sheet3, mTargetRange, SORT_ITEM2)
Call sortItemCollecton.Add(sortRange)
Set ISheetParameterEntity_GetTargetSortItem = sortItemCollecton
End Function

'グループ化列取得
Public Function ISheetParameterEntity_GetGroupColumn() As Integer
ISheetParameterEntity_GetGroupColumn = GROUP_COLUMN
End Function

'対象合計項目
Public Function ISheetParameterEntity_GetTargetSummaryItem() As Integer
ISheetParameterEntity_GetTargetSummaryItem = SUMMARY_ITEM
End Function
0136デフォルトの名無しさん2013/12/08(日) 01:15:14.00
ミスった>>135はなし
モジュール:SheetParameterFactory
'シートパラメタエンティティ作成クラス
Public Function makeSheetParameter(ByVal targetSheet As Worksheet) As ISheetParameterEntity
Dim instance As ISheetParameterEntity
Select Case targetSheet.Name
Case Sheet2.Name
Dim sht2Para As Sheet2ParameterEntity
Set sht2Para = New Sheet2ParameterEntity
Set instance = sht2Para
Case Sheet3.Name
Dim sht3Para As Sheet3ParameterEntity
Set sht3Para = New Sheet3ParameterEntity
Set instance = sht3Para
Case Else
Set instance = Nothing
End Select
Set makeSheetParameter = instance
End Function
0137デフォルトの名無しさん2013/12/08(日) 01:36:17.38
ちょっと長くなって荒らしみたいになって済みません。
が、>>130の部分がインターフェースで

>>123でそのインターフェースの型を用意して、>>136でSheet2ParameterEntityか、Sheet3ParameterEntityの
どちらかを生成して>>123で用意した型に設定しています。
後は生成される二つのクラスの中以外は差異なくコードが走るため、
クラスの違いによる分岐は有りません。
この様に違うクラスで生成したものを同じクラスの型で扱えるようにする
仕組みが、中に何も書かれていない関数の正体です。
0138デフォルトの名無しさん2013/12/08(日) 01:39:18.23
うわぁ、読み返してみると長すぎだ。
ごめんなさいもう二度としません。
0139デフォルトの名無しさん2013/12/08(日) 07:58:29.03
>>119
へー、面白いな、これ。
「Width」って「うぃどぅす」って呼ぶのが一般的なんだ。
今までずーっと「ワイズ」だと思ってた。
0140デフォルトの名無しさん2013/12/08(日) 08:27:53.85
>>138
「Vba、インターフェース、ストラテジーパターン」あたりで
ググれと言えば一発で分かることだろ。
どうしても長いコード書きたかったら前
桃臼が晒してたコード書き場があったから
そこを使え。
どこだったかは忘れたけど。
0141デフォルトの名無しさん2013/12/08(日) 09:52:33.48
フランス語ではいは?
京都人「うぃどす」
0142デフォルトの名無しさん2013/12/08(日) 10:19:44.06
茨城が
いばらきと
いばらぎで僅差なんだね。
本当はどっち?
0143デフォルトの名無しさん2013/12/08(日) 11:10:35.20
本当は
ちばらき
0144デフォルトの名無しさん2013/12/08(日) 11:30:50.96
Then は ゼンって言ってます
なぜか合ってるのか不安になる音です
0145デフォルトの名無しさん2013/12/08(日) 12:26:13.53
日本語に無い音だから、カナ表記するなら近い音を探すしかない
0146デフォルトの名無しさん2013/12/08(日) 12:42:17.43
そこでGoogle翻訳読み上げお姉さんですよ
キュートなお声ですよね
0147デフォルトの名無しさん2013/12/08(日) 15:06:03.17
いやだからおかしいだろそこのリンク先
最初のAAAからして読み方の
西恋ケ窪とかどこだよ。
IEnumerableって何なんだよ。
0148デフォルトの名無しさん2013/12/08(日) 15:34:26.83
IEnumerableはインターフェースだにょ
0149デフォルトの名無しさん2013/12/08(日) 18:05:50.91
私は関数で使う変数宣言を関数の頭で行いますが、
Javaもやっている私の同僚はインデント階層切替わりの単位で変数宣言をします。
関数内のどこで変数宣言しても特に動きが変わらないのは知っていますが、
同僚に言わせるとその方が分かり易いし、いずれObject指向言語に手を付けるなら、
そっちの方に慣れておいた方がいいと言います。
そう言うものなんでしょうか?
0150デフォルトの名無しさん2013/12/08(日) 19:32:44.84
>>149
>関数内のどこで変数宣言しても特に動きが変わらない
VBAではそうでも、Javaではそうではない
言語に合わせて宣言するべきで、VBAではプロシジャの先頭での宣言が薦められてたはず
まあ、どこで宣言しても良いんだが、ルールを決めてそれを守る方が大事
先頭で宣言したり使う直前に宣言したり、混在させるのが最悪
0151デフォルトの名無しさん2013/12/08(日) 20:55:04.75
>>149
vbaはやっぱり頭で合わせるもんだと思う。
無理してjavaなんぞに合わせなくても
object指向ので作る時にそうすればいいじゃない。
0152デフォルトの名無しさん2013/12/08(日) 21:01:29.51
>>148
冗談で言ってるのかと思ったら
本当でビビったw
0153デフォルトの名無しさん2013/12/08(日) 21:07:26.86
変数の話ならそんなことより
DimとPrivateの違いって何なの?
0154デフォルトの名無しさん2013/12/08(日) 21:37:29.33
>>153
モジュールレベルで宣言したときのスコープ(参照できる範囲)が違う
と思ったけど、モジュールレベルで使うとDimと同じスコープか
プロシジャレベルで使えるかどうかの違いだけで同じだな

VBではPublicかPrivate書いたらDimを省略できる出来るだけだったと記憶してるが
VBAではそうじゃないっぽいな
0155デフォルトの名無しさん2013/12/09(月) 20:52:31.18
>>153
Dimは遠い昔の、それこそVBじゃない頃、
N-Basicとかで配列をDim(dimension)で
宣言してた頃の名残りで盲腸みたいなもんだから、
出来ればPrivateで宣言した方がいいと、個人的には思う。
コメントをアポストロフィで付けないで、REMで書く様なもん。
0156デフォルトの名無しさん2013/12/10(火) 01:13:10.32
シングルコートまたはシングルコーテーションと言わずにアポストロフィとおっしゃるのは癖ですか?何か意図があれば解説きぼんぬ
0157デフォルトの名無しさん2013/12/10(火) 01:51:33.24
それを言うなら自分もまず「シングルクォート」と書くべきじゃね
0158デフォルトの名無しさん2013/12/10(火) 02:05:44.25
>>156
引用符(コーテーションマーク、クォーテーションマーク)は、前と後の一対で使うもの
0159デフォルトの名無しさん2013/12/10(火) 02:09:15.25
シングルコーテーションマークは、英語で使われ、
日本語ではあまり使われない
(中国語や韓国語では普通に使われるらしい)
0160デフォルトの名無しさん2013/12/10(火) 02:38:21.76
シングルクォーテーションとアポストロフィは厳密には別物なんだろうけど
もともともコメント記号としてどっちの意図で使われたのかはわからんしなぁ
俺もこの文脈なら'はアポストロフィって言うんだが、ヘルプみると
>コメントを入力するには、先頭にクォーテーション (') を入力するか、Rem ステートメントで指定します。
とか
>コメント行は、先頭にクォーテーション (') または Rem ステートメントのいずれかと、
とか書いてあるから、あれはクォーテーションと呼ぶのが正しいのかもしれん
0161デフォルトの名無しさん2013/12/10(火) 03:14:25.20
記号の読み方はJIS規格で「シングルクォーテーションマーク」と定められているので議論の余地はない

英語的な解釈をするなら、アポストロフィはコメント行の先頭に使っていい記号ではない
本来はクォーテーションで前後を囲ったであろう物を、8bit時代のMS-BASICのリソース的な制約から
後半を省略可能にしたと見るのが妥当
0162デフォルトの名無しさん2013/12/10(火) 04:19:23.00
そういうのも定められてるのか。
そのJIS企画の当該ページのリンクが貼られたらこの話は終わりにしよう。
それまでは存分に語らい合いましょう!

ってExcel VBAスレじゃないですか。
おわり。
0163デフォルトの名無しさん2013/12/10(火) 04:33:44.43
>>161
お前のキーボードはjIS規格配列なのか?
VBAはいつからJIS規格になったんだ

違う規格の定義をあてはめて議論の余地がないとか笑わせる
0164デフォルトの名無しさん2013/12/10(火) 04:42:38.53
おーっとここで待ったが入ったーっ!
これは確かにと言わざるを得ない。
これで結論はもう出たということか。
VBAのオフィシャルドキュメントで、
コメントには何を使うと記載されているのか?
で、この話に執着する者達が終着できそうだ。

公式文書のリンクが貼られたらこの話は終わりにしよう。
それまでは存分に語らい合いましょう!

って略
0165桃白白 ◆9Jro6YFwm650 2013/12/10(火) 05:26:36.90
>>164
語らうには語り合うという意味があるから合うを付ける必要ないんじゃないかな。
語らいましょう、または、語り合いましょうでいいと思うんだよね。
0166デフォルトの名無しさん2013/12/10(火) 05:33:56.97
>>165
うっせーばーか
いいと思うんだよねってなんだよ
いいんだよって言い切れないのかよ
もっと自信もてよボケカス
早くVBAの公式文書のリンク持ってこいや
0167桃白白 ◆9Jro6YFwm650 2013/12/10(火) 05:38:24.57
(´・ω・`)・ω・`) キャー
/  つ⊂  \  怖いー
0168デフォルトの名無しさん2013/12/10(火) 05:57:51.45
\               U         /
  \             U        /
             / ̄ ̄ ヽ,
            /        ',      /     _/\/\/\/|_
    \    ノ//, {0}  /¨`ヽ {0} ,ミヽ    /     \          /
     \ / く l   ヽ._.ノ   ', ゝ \       <   バーカ!  >
     / /⌒ リ   `ー'′   ' ⌒\ \    /          \
     (   ̄ ̄⌒          ⌒ ̄ _)    ̄|/\/\/\/ ̄
      ` ̄ ̄`ヽ           /´ ̄
           |            |  
  −−− ‐   ノ           |
          /            ノ        −−−−
         /           ∠_
  −−   |    f\      ノ     ̄`丶.
        |    |  ヽ__ノー─-- 、_   )    − _
.        |  |            /  /
         | |          ,'  /
    /  /  ノ           |   ,'    \
      /   /             |  /      \
   /_ノ /              ,ノ 〈           \
    (  〈              ヽ.__ \        \
     ヽ._>              \__)
0169デフォルトの名無しさん2013/12/10(火) 19:53:40.33
まぁいいじゃないか。
「'」に変わりはないんだろうし。
0170デフォルトの名無しさん2013/12/13(金) 00:23:21.08
Excelにはテキストリーダー の機能があると聞きました。
それに音程付けてボーカロイドみたいにすることってできますか?
0171デフォルトの名無しさん2013/12/13(金) 05:55:28.56
無理
0172デフォルトの名無しさん2013/12/15(日) 07:52:32.98
>>170
可能
0173デフォルトの名無しさん2013/12/15(日) 20:26:43.18
マクロの設定を有効にしているにもかかわらず多変量解析を行おうとすると
マクロが使用できないか、全てのマクロが無能になっている可能性があります、と出ます
どうすれば多変量解析を実行できるでしょうか?
0174デフォルトの名無しさん2013/12/15(日) 20:39:43.00
excelのバージョンも書かず、どこに置いてあるものなのかも言わず
excel2007以降なら信頼できる場所に置いてあるのかいないのかなどなど情報を一切書かず
0175デフォルトの名無しさん2013/12/15(日) 20:45:23.66
>>173
他のブックのVBAでも同じ状態?
ググって見つかった下記などは試してみたのかな
http://answers.microsoft.com/ja-jp/office/forum/office_2007-excel/%E7%AA%81%E7%84%B6%E3%83%9E%E3%82%AF%E3%83%AD/b9379ad8-40f6-4415-b490-3090a900a8a0?msgId=122645e7-040b-400b-8f7e-77bddfa6e101
0176デフォルトの名無しさん2013/12/17(火) 22:47:10.17
よくわかりませんが同じようなスレがここにもありましたので
同じ質問になると思いますが

日付で今日より1年前のデータで、最古のデータ行を拾いたいのです
WorksheetFunction.Matchで照合の型を-1で、降順に並び替えれば
うまくいきますが、データは昇順の状態で
一年前の最古のデータ行を拾う方法ありますか?
昇順のままで照合の型を-1だと当然失敗します
(最新のデータを拾ってしまいます)
いろいろ調べたのですが、いい方法がみつかりませんでした
どなたかいい方法ありませんか?
0177デフォルトの名無しさん2013/12/17(火) 23:20:52.18
>>176
マルチ
どちらかを質問終了するべし
01781762013/12/19(木) 01:49:09.75
自己解決できました
0179デフォルトの名無しさん2013/12/19(木) 18:30:09.13
同じフォルダ内にある複数のtextの記述(数字が縦に6行)を読み込むマクロを
作りたいのですが、
たとえば1つ目のtextの1行目をA-1に 2行目の記述をB-1に …
と6行を6列のに読み込み、さらにファイル名(文字列)を7列目のG-1に読み込み、
2つ目のtextの1行目をA-2に、2行目の記述をB-2に …
と読み込ませることはできませんでしょうか?
0180デフォルトの名無しさん2013/12/19(木) 19:30:34.70
できます
0181デフォルトの名無しさん2013/12/19(木) 19:40:28.24
できましたら、その方法を教えて頂けませんでしょうか?
0182デフォルトの名無しさん2013/12/19(木) 19:52:46.93
まだできていませんので教えることはできません
0183デフォルトの名無しさん2013/12/19(木) 21:54:28.52
>>179
とりあえず書いてみたけど、やっつけなのでエラー処理とかは書いてません

以下のマクロを書いたブックと同じフォルダに"text"フォルダを作って
その中に読み込ませたいテキストファイルを入れてください。
マクロを実行すると、マクロと同じフォルダに"test.xlsx"というファイルが作成されます。
既に"test.xlsx"が存在する場合、上書きするか聞いてきます。
"text"フォルダ内には不要なファイルは入れないでください。

Option Explicit
Sub test()
Dim f As Object
Dim w As Workbook
Dim t As Workbook
Dim fso As Object
Set fso = CreateObject("Scripting.FileSystemObject")
Set w = Workbooks.Add
With w.Sheets(1)
 For Each f In fso.GetFolder(ThisWorkbook.Path & "\text").Files
  Set t = Workbooks.Open(f)
  t.Sheets(1).UsedRange.Copy
  If .Cells(1, 1) = "" Then
   .Cells(1, 1).PasteSpecial Transpose:=True
  Else
   .Cells(.Rows.Count, 1).End(xlUp).Offset(1).PasteSpecial Transpose:=True
  End If
  t.Close
 Next f
End With
w.Close SaveChanges:=True, Filename:=ThisWorkbook.Path & "\test.xlsx"
End Sub
01841832013/12/19(木) 22:08:35.18
やべ、各テキストファイルのファイルネームを入れるっての忘れてた…orz
01851832013/12/19(木) 22:22:52.58
修正も超やっつけですが、コード中の
t.Close 
の行の前に
.Cells(.Rows.Count, 1).End(xlUp).End(xlToRight).Offset(, 1) = t.Name
ってのを一行入れてください。
0186デフォルトの名無しさん2013/12/20(金) 09:18:25.34
ありがとう!
あなたは救世主です!
本当にたすかりました。
0187デフォルトの名無しさん2013/12/20(金) 16:20:17.72
大学生でエクセルテストちょっと前にしたんですが答えは小数点第2位までて言われたので切り捨てして提出したんですが
いつ切り捨てするのかよくわかりませんでした。
計算は1度計算したのをさらにかけたり割ったりします。
ここで、
最初にかけ算→小数点切り捨て→かけ算
なのか
かけ算→かけ算→割り算など全部した後いっきに切り捨てた方が良いのか
前者でやっていたんですがこの2つだと当然答えも違ってきますよね
普通どっちが正解なんですか?
0188デフォルトの名無しさん2013/12/20(金) 18:55:18.13
>>187
http://toro.2ch.net/test/read.cgi/tech/1381151995/236
0189デフォルトの名無しさん2013/12/20(金) 22:31:06.75
ここ最近、毎日のようにマルチが現れるな
0190デフォルトの名無しさん2013/12/21(土) 23:30:15.40
>>189
スレ立て自体がマルチなんだからしゃーない
0191デフォルトの名無しさん2013/12/22(日) 06:22:28.69
ここ最近、毎日のようにマルチマルチってうるせえ馬鹿が現れるな
0192デフォルトの名無しさん2013/12/30(月) 19:22:49.48
本年大変お世話になりました
来年もお力をお借りするかもしれませんが宜しくお願いいたします

机周りの掃除が終りましたので帰ります
皆様良いお年を!@22歳OL
0193デフォルトの名無しさん2013/12/31(火) 00:00:44.71
たまにはこのスレに遊びにきてね
0194デフォルトの名無しさん2014/01/01(水) 11:34:15.70
あけおめ〜〜〜〜〜〜
0195デフォルトの名無しさん2014/01/03(金) 13:54:51.99
ことよろ
0196デフォルトの名無しさん2014/01/03(金) 22:44:38.74
さくおせ
0197デフォルトの名無しさん2014/01/04(土) 02:37:30.74
なあ、桃白白
ピラフ知らない?
0198デフォルトの名無しさん2014/01/04(土) 05:04:21.87
あけましておめでとう
23歳OL
0199デフォルトの名無しさん2014/01/14(火) 15:36:02.26
何をどこで質問したらいいかもわからないからスレ違いなら許して。
適当に1〜100までとか1〜20までとかの数字から無作為に実数の数字を抽出
するのはどうしたらいいのでしょうか。
0200デフォルトの名無しさん2014/01/14(火) 16:31:22.93
>>199
VBA 乱数 とかでググるといいと思うよ
0201デフォルトの名無しさん2014/01/14(火) 18:59:00.73
>>199
Rnd  でどう?
0202デフォルトの名無しさん2014/01/16(木) 02:21:35.14
>>199
らんだまいずもわすれずにね
0203デフォルトの名無しさん2014/01/17(金) 15:26:54.71
放置プレイ
0204デフォルトの名無しさん2014/01/19(日) 02:44:28.45
エクセルは2000、VBAは6.0です。

同じファイルにある他のマクロはちゃんと起動するのですが、
同じファイルにある、とあるマクロを実行しようと
ユーザーフォームの実行(▲を右90度傾けたボタン)を押しても
うんともすんともいいません。
エラーも出ません。
何が原因だと思いますか?
0205デフォルトの名無しさん2014/01/19(日) 03:11:26.69
>>204
一瞬で計算が終わって、動いてるのに気付いてないだけの可能性
0206デフォルトの名無しさん2014/01/19(日) 09:29:19.72
>>204
具体的なコードを貼らないと、なんとも言えん。
具体的なコードを晒すのが嫌なら、自力でなんとかするか諦めよう。

というか、コード全部は晒さないにしても、ステップ実行とかして
どの関数やステートメントで想定外の動作が起きてるか調べて
もうちょっと詳しい状況書けば、憶測も少しは煮詰まるかもだけどな。

そもそもデバッグ出来ないってのはVBA使えないのと同義だからね。
不都合が起こったところでお手上げでいいなら、コード書くだけは
パソコンで文字入力できる全ての人に可能な行為だからな。
02072042014/01/19(日) 19:45:55.40
>>205
すみません。正解です。
最初のfornextの、終了回の変数名の打ち間違いで、
どうやら0回ループになっていたようです。
>>206
すみませんでした。
0208デフォルトの名無しさん2014/01/19(日) 22:34:06.31
格言
「プログラムは決して思った通りには動かない。書いた通りに動くだけだ。」
0209デフォルトの名無しさん2014/01/21(火) 10:55:48.33
いいね♪(FB風に
0210デフォルトの名無しさん2014/01/23(木) 04:13:29.39
サブフォルダを含むpdfファイルから画像サイズだけ抜き出してセルに表示したいのですが
この場合どのようにPDFファイルのmediaboxを参照すれば良いか教えてください。
0211デフォルトの名無しさん2014/01/23(木) 04:17:34.57
win7 excel2010です
0212デフォルトの名無しさん2014/01/23(木) 19:06:40.97
どういうこと?
0213デフォルトの名無しさん2014/01/23(木) 20:00:12.85
どういうpdfなんだか差し支えない範囲で見せて欲しい w
0214デフォルトの名無しさん2014/01/23(木) 21:15:12.64
というか、Excel関係ないやんw

なんて言うと、例のキチガイがまたうるさそうだけど
■ このスレッドは過去ログ倉庫に格納されています