[[20050129085358]] 『データがなくても文字を返す方法』(黒豹) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『データがなくても文字を返す方法』(黒豹)
 説明が少々難しいので以下の表をご参照下さい。
    A   B   C
 1 振込完了リスト
 2 A支店 10000
 3 B支店 10000
 4 C支店 10000
 5
 6 振込エラーリスト
 7 A支店 5000
 8 B支店 5000
 9 C支店 5000

 上記のようなリストに対し、C列に文字を
 返したいと思います。

    A   B   C
 1 振込完了リスト
 2 A支店 10000  済
 3 B支店 10000  済
 4 C支店 10000  済
 5
 6 振込エラーリスト
 7 A支店 5000  未
 8 B支店 5000  未
 9 C支店 5000  未

 それぞれの行には特に完了などを示す
 コードなどは全く存在せず、完了リストと
 エラーリストの間が1行空いているだけです。
 このような条件で、表題(セルA1、A6)から
 C列に文字を返す事は可能でしょうか?
 尚、リストの行数は増減し固定ではありません。
 ご回答、よろしくお願い致します。

 済または未を表示する条件は何ですか?
 (Hatch)

 各項目の表題(上記の例ではセルA1、A6)の
 文字での判断になります。
 表題の下にリストが並び、1行空いて別の項目
 (表題がありリストが並ぶ)が続きます。
 (黒豹)

 一応テストはしてみたんですが、、ひょっとしたら??かも?です。
どうでしょう?
Option Explicit
Sub てすと()
Dim MyA As Variant, MyAry() As Variant
Dim i As Long, Myflag As Long
With Worksheets("Sheet1")
MyA = .Range("A1", .Range("A65536").End(xlUp)).Resize(, 2).Value
ReDim MyAry(1 To UBound(MyA, 1), 1 To 1)
For i = 1 To UBound(MyA, 1)
    If InStr(1, MyA(i, 1), "完了") > 0 Then
        Myflag = 1
    ElseIf InStr(1, MyA(i, 1), "エラー") > 0 Then
        Myflag = 2
    ElseIf IsEmpty(MyA(i, 1)) Then
        Myflag = 0
    End If
    If Not IsEmpty(MyA(i, 2)) Then
        Select Case Myflag
            Case 1
                MyAry(i, 1) = "済"
            Case 2
                MyAry(i, 1) = "未"
        End Select
    End If
Next
With .Range("C1")
    .EntireColumn.ClearContents
    .Resize(UBound(MyA, 1)).Value = MyAry
    .EntireColumn.AutoFit
End With
End With
Erase MyA, MyAry
End Sub
あはははは、さっそくちょっと訂正(;^_^A あせあせ・・・
(SoulMan)

 無理やりなので、落とし穴があるかも・・・
 さらに、無駄がありそうですが〜

 C2 =IF(AND(A2<>"",B2<>""),IF(C1="済","済",IF(ISERROR(C1*1),"未","済")),"")
 以下、必要なところまでコピー

 (キリキ)時間が無いので、書き逃げになりそうです(^_^;)
 15:40 修正

 C2に=MID("済未",COUNTBLANK(A$2:A2)+1,COUNT(B2))として、
 下にフィルドラッグするというものは、どうでしょう?                        (LOOKUP)

 横から失礼します。
 LOOKUPさん、よくまあこんなやり方思いつくものですねえ。
 メモ、メモ・・・。  (SS)

 す・すごい!!
 MID関数のこういった使い方を始めて知りました!!
 はっきり言って、感動してます〜♪
 〆\(.. )メモメモ
 (キリキ)


やりたいことを要約すると

 A列で振込エラーリストの次の行から全ての
 C列に「未」を記載する。また 2行から
振込エラーリスト行の2行上まで「完」を記載する。 

  こういうことでしょか。
 であれば,下記マクロを実行すれば出来ると思います。

Sub 未を記載()

lastrow = Cells(Rows.Count, 1).End(xlUp).Row

For i = 1 To lastrow
If Cells(i, 1) = "振込エラーリスト" Then

  For j = i + 1 To lastrow
   Cells(j, 3) = "未"
   Next

  For k = 2 To i - 2
   Cells(k, 3) = "完"
   Next

End If

Next

End Sub

(なお)


上でも可でしたが,完璧をねらい下記を作ってみました。(なお)
 A列に表題とその下にデータがあれば,空欄行まで記載できます。

Sub 済未を記載()

lastrow = Cells(Rows.Count, 1).End(xlUp).Row

''' 「未」記載

For i = 1 To lastrow

    If Cells(i, 1) = "振込エラーリスト" Then
    start未 = i + 1
    Exit For
    End If

 Next

 For j = start未 To lastrow + 1

    If Cells(j, 1) = "" Then
    end未 = j - 1
    Exit For
    End If

  Next

For k = start未 To end未

 Cells(k, 3) = "未"
Next

''' 「済」記載

For i = 1 To lastrow

    If Cells(i, 1) = "振込完了リスト" Then
    start済 = i + 1
    Exit For
    End If

 Next

 For j = start済 To lastrow + 1

    If Cells(j, 1) = "" Then
    end済 = j - 1
    Exit For
    End If

  Next

For k = start済 To end済

 Cells(k, 3) = "済"
Next

End Sub


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.