Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


2108 / 13645 ツリー ←次へ | 前へ→

【69892】項目内の最大絶対値取得 たん 11/9/21(水) 10:46 質問[未読]
【69893】Re:項目内の最大絶対値取得 かみちゃん 11/9/21(水) 11:18 発言[未読]
【69894】Re:項目内の最大絶対値取得 たん 11/9/21(水) 11:58 質問[未読]
【69895】Re:項目内の最大絶対値取得 たん 11/9/21(水) 12:01 質問[未読]
【69910】Re:項目内の最大絶対値取得 かみちゃん 11/9/22(木) 16:51 発言[未読]
【69912】Re:項目内の最大絶対値取得 たん 11/9/22(木) 18:44 お礼[未読]
【69907】Re:項目内の最大絶対値取得 ちん 11/9/22(木) 16:27 発言[未読]
【69911】ありがとうございました たん 11/9/22(木) 17:57 お礼[未読]

【69892】項目内の最大絶対値取得
質問  たん E-MAIL  - 11/9/21(水) 10:46 -

引用なし
パスワード
   お世話になります。
VBAを始めたばかりの初心者です。初めて質問させていただきます。
解析されたデータをCSVで取得して目視で最大絶対値の拾い出しをおこなっているのですがマクロでデータの拾い出しを考えています。
条件としては、各項目毎(曲げ関係、軸力・座屈関係等)にデータが作成されます。項目毎の特定の材料の最大絶対値を取得したいのですが中々わかりません。
恐縮ですが教えていただけないでしょうか。
要素No 節点No 材料Noはその時によって可変します。



   A列   B列   C列   D列 
1行  項目      材料No 曲げモーメントMyB(N・mm)
2行  曲げ関係    2    22410  ← 項目と材料NO.を指定
3行  軸力・座屈関係 2    99.16
4行
5行
6行
7行


・      30行以降に解析されたデータを手動で貼り付け
30行 
31行 曲げ関係            
32行 要素No 節点No 材料No 曲げモーメントMyB(N・mm)
33行 1       22   1   0
34行 1       23   1   0
35行 2       23   2   0
36行 2       24   2   -22410
37行 3       24   2   -22410
38行 3       25   3   123200
39行 4       25   3   123200
40行 軸力・座屈関係            
41行 要素No 節点No 材料No 軸力FxB(N)
42行 1    22   1   0
43行 1    23   1   0
44行 2    23   1   -50.37
45行 2    24   2   -50.37
46行 3    24   2   -99.16
47行 3    25   2   -99.16
48行 4    25   3   -149.5
49行 4    26   3   -149.5
50行 5    26   3   -199.9
51行 5    27   4   -199.9
・       ・      ・
・       ・      ・
・       ・      ・

【69893】Re:項目内の最大絶対値取得
発言  かみちゃん E-MAIL  - 11/9/21(水) 11:18 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>解析されたデータをCSVで取得して目視で最大絶対値の拾い出しをおこなっているのですがマクロでデータの拾い出しを考えています。
>条件としては、各項目毎(曲げ関係、軸力・座屈関係等)にデータが作成されます。項目毎の特定の材料の最大絶対値を取得したいのですが中々わかりません。

求めたいのは、下表で
・A2セルとC2セルを指定すると、D2セルが求められる
・A3セルとC3セルを指定すると、D3セルが求められる
ということですか?

元データであるCSVデータは、30行目以下に手動で貼り付けということですが、
貼り付けをしない場合、何か問題がありますか?

問題がない場合、Excelシートに貼り付けなくても、CSVファイルから直接検索すればいいのですが、

>31行 曲げ関係            
>40行 軸力・座屈関係            

は同じCSVファイルですか?別のCSVファイルですか?

>例
>   A列   B列   C列   D列 
>1行  項目      材料No 曲げモーメントMyB(N・mm)
>2行  曲げ関係    2    22410  ← 項目と材料NO.を指定
>3行  軸力・座屈関係 2    99.16
>4行
>5行
>6行
>7行
>・
>・
>・      30行以降に解析されたデータを手動で貼り付け
>30行 
>31行 曲げ関係            
>32行 要素No 節点No 材料No 曲げモーメントMyB(N・mm)
>33行 1    22   1   0
>34行 1    23   1   0
>35行 2    23   2   0
>36行 2    24   2   -22410
>37行 3    24   2   -22410
>38行 3    25   3   123200
>39行 4    25   3   123200
>40行 軸力・座屈関係            
>41行 要素No 節点No 材料No 軸力FxB(N)
>42行 1    22   1   0
>43行 1    23   1   0
>44行 2    23   1   -50.37
>45行 2    24   2   -50.37
>46行 3    24   2   -99.16
>47行 3    25   2   -99.16
>48行 4    25   3   -149.5
>49行 4    26   3   -149.5
>50行 5    26   3   -199.9
>51行 5    27   4   -199.9
>・       ・      ・
>・       ・      ・
>・       ・      ・

【69894】Re:項目内の最大絶対値取得
質問  たん E-MAIL  - 11/9/21(水) 11:58 -

引用なし
パスワード
   さっそくありがとうございます

▼かみちゃん さん:
>こんにちは。かみちゃん です。
>
>>解析されたデータをCSVで取得して目視で最大絶対値の拾い出しをおこなっているのですがマクロでデータの拾い出しを考えています。
>>条件としては、各項目毎(曲げ関係、軸力・座屈関係等)にデータが作成されます。項目毎の特定の材料の最大絶対値を取得したいのですが中々わかりません。
>
>求めたいのは、下表で
>・A2セルとC2セルを指定すると、D2セルが求められる
>・A3セルとC3セルを指定すると、D3セルが求められる
>ということですか?

はい、そうです。

>
>元データであるCSVデータは、30行目以下に手動で貼り付けということですが、
>貼り付けをしない場合、何か問題がありますか?

基本的には前に貼り付けたデータを削除して再度別のデータを貼り付けます。

>
>問題がない場合、Excelシートに貼り付けなくても、CSVファイルから直接検索すればいいのですが、

CSVを取得するシステム側からクリップボードコピーでデータを貼り付けます。

>
>>31行 曲げ関係            
>>40行 軸力・座屈関係            
>
>は同じCSVファイルですか?別のCSVファイルですか?

まったく別のデータです


>
>>例
>>   A列   B列   C列   D列 
>>1行  項目      材料No 曲げモーメントMyB(N・mm)
>>2行  曲げ関係    2    22410  ← 項目と材料NO.を指定
>>3行  軸力・座屈関係 2    99.16
>>4行
>>5行
>>6行
>>7行
>>・
>>・
>>・      30行以降に解析されたデータを手動で貼り付け
>>30行 
>>31行 曲げ関係            
>>32行 要素No 節点No 材料No 曲げモーメントMyB(N・mm)
>>33行 1    22   1   0
>>34行 1    23   1   0
>>35行 2    23   2   0
>>36行 2    24   2   -22410
>>37行 3    24   2   -22410
>>38行 3    25   3   123200
>>39行 4    25   3   123200
>>40行 軸力・座屈関係            
>>41行 要素No 節点No 材料No 軸力FxB(N)
>>42行 1    22   1   0
>>43行 1    23   1   0
>>44行 2    23   1   -50.37
>>45行 2    24   2   -50.37
>>46行 3    24   2   -99.16
>>47行 3    25   2   -99.16
>>48行 4    25   3   -149.5
>>49行 4    26   3   -149.5
>>50行 5    26   3   -199.9
>>51行 5    27   4   -199.9
>>・       ・      ・
>>・       ・      ・
>>・       ・      ・

【69895】Re:項目内の最大絶対値取得
質問  たん E-MAIL  - 11/9/21(水) 12:01 -

引用なし
パスワード
   ▼たん さん:
>さっそくありがとうございます
>
>▼かみちゃん さん:
>>こんにちは。かみちゃん です。
>>
>>>解析されたデータをCSVで取得して目視で最大絶対値の拾い出しをおこなっているのですがマクロでデータの拾い出しを考えています。
>>>条件としては、各項目毎(曲げ関係、軸力・座屈関係等)にデータが作成されます。項目毎の特定の材料の最大絶対値を取得したいのですが中々わかりません。
>>
>>求めたいのは、下表で
>>・A2セルとC2セルを指定すると、D2セルが求められる
>>・A3セルとC3セルを指定すると、D3セルが求められる
>>ということですか?
>
>はい、そうです。
>
>>
>>元データであるCSVデータは、30行目以下に手動で貼り付けということですが、
>>貼り付けをしない場合、何か問題がありますか?
>
>基本的には前に貼り付けたデータを削除して再度別のデータを貼り付けます。
>
>>
>>問題がない場合、Excelシートに貼り付けなくても、CSVファイルから直接検索すればいいのですが、
>
>CSVを取得するシステム側からクリップボードコピーでデータを貼り付けます。
>
>>
>>>31行 曲げ関係            
>>>40行 軸力・座屈関係            
>>
>>は同じCSVファイルですか?別のCSVファイルですか?

すみません間違いです。クリップボードで同時に貼り付けされますので同じCSVです


>
>
>>
>>>例
>>>   A列   B列   C列   D列 
>>>1行  項目      材料No 曲げモーメントMyB(N・mm)
>>>2行  曲げ関係    2    22410  ← 項目と材料NO.を指定
>>>3行  軸力・座屈関係 2    99.16
>>>4行
>>>5行
>>>6行
>>>7行
>>>・
>>>・
>>>・      30行以降に解析されたデータを手動で貼り付け
>>>30行 
>>>31行 曲げ関係            
>>>32行 要素No 節点No 材料No 曲げモーメントMyB(N・mm)
>>>33行 1    22   1   0
>>>34行 1    23   1   0
>>>35行 2    23   2   0
>>>36行 2    24   2   -22410
>>>37行 3    24   2   -22410
>>>38行 3    25   3   123200
>>>39行 4    25   3   123200
>>>40行 軸力・座屈関係            
>>>41行 要素No 節点No 材料No 軸力FxB(N)
>>>42行 1    22   1   0
>>>43行 1    23   1   0
>>>44行 2    23   1   -50.37
>>>45行 2    24   2   -50.37
>>>46行 3    24   2   -99.16
>>>47行 3    25   2   -99.16
>>>48行 4    25   3   -149.5
>>>49行 4    26   3   -149.5
>>>50行 5    26   3   -199.9
>>>51行 5    27   4   -199.9
>>>・       ・      ・
>>>・       ・      ・
>>>・       ・      ・

【69907】Re:項目内の最大絶対値取得
発言  ちん  - 11/9/22(木) 16:27 -

引用なし
パスワード
   こんにちわ、たん さん:

データの並びがいまいち、理解できないのですが、関数で判断します。
曲げ関係のデータと、軸力・座屈関係のデータは、ソートしたとして考えます。

     A        B       C          D
01行                ※曲げの絶対値計算式  
02行                ※軸力の絶対値計算式
03行  項目      材料No   曲げモーメントMyB(N・mm)
04行  曲げ関係    2      22410     =IF($C$1=ABS(C4),"*","")
05行  曲げ関係    2      12410     =IF($C$1=ABS(C5),"*","")
06行  曲げ関係    3      -410     =IF($C$1=ABS(C6),"*","")
07行  曲げ関係    4     -32410     =IF($C$1=ABS(C7),"*","")
08行  曲げ関係    4     125600     =IF($C$1=ABS(C8),"*","")
09行  曲げ関係    5     -125800     =IF($C$1=ABS(C9),"*","")
10行  曲げ関係    6      5600     =IF($C$1=ABS(C10),"*","")
11行  軸力・座屈関係 2      22410     =IF($C$2=ABS(C11),"#","")
12行  軸力・座屈関係 2      12410     =IF($C$2=ABS(C11),"#","")
13行  軸力・座屈関係 3      -410     =IF($C$2=ABS(C11),"#","")
14行  軸力・座屈関係 4     -32410     =IF($C$2=ABS(C11),"#","")
15行  軸力・座屈関係 4       600     =IF($C$2=ABS(C11),"#","")

D列に、最大絶対値の場合、*を表示する式を入れます。
※曲げの絶対値表示の関数は、C1セルに、
=MAX(ABS($C$4:$C$10) この入力で通常なら最後に ”)”入れますが、
SHIFTキー + CTRLキー + ENTERキー 押すと、
表示が、{=MAX(ABS($C$4:$C$10)} になります。
同様に、
※軸力の絶対値表示の関数は、C2セルに、
=MAX(ABS($C$11:$C$15) この入力で通常なら最後に ”)”入れますが、
SHIFTキー + CTRLキー + ENTERキー 押すと、
表示が、{=MAX(ABS($C$11:$C$15)} になります。
  
以上、参考までに・・・

【69910】Re:項目内の最大絶対値取得
発言  かみちゃん E-MAIL  - 11/9/22(木) 16:51 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>>>解析されたデータをCSVで取得して目視で最大絶対値の拾い出しをおこなっているのですがマクロでデータの拾い出しを考えています。
>>>条件としては、各項目毎(曲げ関係、軸力・座屈関係等)にデータが作成されます。項目毎の特定の材料の最大絶対値を取得したいのですが中々わかりません。
>>
>>求めたいのは、下表で
>>・A2セルとC2セルを指定すると、D2セルが求められる
>>・A3セルとC3セルを指定すると、D3セルが求められる
>>ということですか?
>
>はい、そうです。

一例として、以下のような感じでできると思います。

Sub Sample()
 Dim WS As Worksheet
 Dim rngData As Range
 Dim vntData As Variant
 Dim rngFind As Range
 Dim y As Long
 Dim rngList As Range
 Dim rngStart As Range
 Dim rngEnd As Range
 Dim v As Variant
 Dim yyy As Long
 Dim yy As Long
 Dim xx As Long
 Dim vntList As Variant
 
 Set WS = ActiveSheet
'抽出条件の範囲
 Set rngData = WS.Range("A1:I30")
 vntData = rngData.Formula
'貼り付けデータがある範囲(30行目は、空白行とし、貼り付けデータ内には、行全体または列全体が空白の行または列がないこと)
 Set rngFind = WS.Range("A31").CurrentRegion
 
 For y = 1 To UBound(vntData, 1)
  If vntData(y, 1) Like "*関係" Then
  
  '最大値検索範囲の取得
   Set rngList = Nothing
   Set rngStart = rngFind.Columns(1).Find(What:=vntData(y, 1), After:=rngFind.Cells(1, 1))
   If Not rngStart Is Nothing Then
    Set rngEnd = rngFind.Columns(1).Find(What:="*関係", After:=rngStart)
    If Not rngEnd Is Nothing Then
     If rngEnd.Row < rngStart.Row Then
      Set rngEnd = rngFind.Cells(rngFind.Rows.Count, 1)
     End If
    Else
     Set rngEnd = rngFind.Cells(rngFind.Rows.Count, 1)
    End If
    Set rngList = Range(rngStart.Cells(1, 1), rngEnd.Cells(0, 1)).Resize(, rngFind.Columns.Count)
   End If
      
  '最大値検索範囲があったら、
   If Not rngList Is Nothing Then
    v = rngList.Value
    yyy = 0
    ReDim vntList(1 To UBound(v, 1), 1 To UBound(v, 2))
    For yy = 1 To UBound(v, 1)
     '検索範囲内の「材料No」が抽出条件の「材料No」に一致している場合
     If CStr(v(yy, 3)) = CStr(vntData(y, 3)) Then
      yyy = yyy + 1
      For xx = 1 To UBound(v, 2)
       If IsNumeric(v(yy, xx)) Then
       'マイナス数値の場合、絶対値に変換のため -1 を乗算
        If v(yy, xx) < 0 Then
         vntList(yyy, xx) = v(yy, xx) * -1
        Else
         vntList(yyy, xx) = v(yy, xx)
        End If
       Else
        vntList(yyy, xx) = v(yy, xx)
       End If
      Next
     End If
    Next
   End If
  
  '4列目から最大値を取得
   For xx = 4 To UBound(vntList, 2)
    vntData(y, xx) = Application.WorksheetFunction.Max(Application.WorksheetFunction.Index(vntList, 0, xx))
   Next
  End If
 
 Next

'最大値を出力
 rngData.Formula = vntData
End Sub

【69911】ありがとうございました
お礼  たん E-MAIL  - 11/9/22(木) 17:57 -

引用なし
パスワード
   色々と親切に回答いただきありがとうございました。
無事に動作しました。

【69912】Re:項目内の最大絶対値取得
お礼  たん E-MAIL  - 11/9/22(木) 18:44 -

引用なし
パスワード
   何から何までしていただき非常に助かりました。
いただいたサンプルを解析して少しでも早く理解できるようがんば
りたいと思います。
もし、他で疑問に思うことがあればまた、教えていただくこともあ
るかと思いますがその際はよろしくお願い致します。

2108 / 13645 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free