|
▼みゆき さん:
>そうですね。ミスをなくす為にもそれも取り入れようと思います。
>
>また質問が出たのですが、
>
> Cells(i, 2) = "名無しさん"
>
>のところで名前を入力(送出)していますが、この名前の情報を元に「一般」と「会社関係」の2つに区分分けしたいのですが。
>エクセルのセルには印刷欄外に「一般リスト」、「会社関係リスト」として名前のリストはあります。
>
>人数が多いのでcase:○○○○だと書く行数がとんでもない数になってしまいます。
>範囲指定でここからここまでを検索してマッチするものがあるかどうか検索してセルに区分を表示するなどと言った都合の良い記述法などはありますでしょうか?
>
>
>表示例)
>
>関 係 名 前 受付番号 受付時間
>
>会社関係 名無しさん 1 10:22
>一般 ななしさん 2 10:25
> : : : :
> : : : :
>
>初めはエクセル側で区別する式を入れておいたのですが、ユーザーフォームから情報を送るとどうも消えてしまうようで上手くいきませんでした。
区別する式もたぶんコピーできますよ。
とりあえず直接値をいれるやり方
Function Get関係(ByVal NameText As String) As String
'整数でループしてもいいのですがちょっとかわったことしたくなったので
' http://www.vbalab.net/vbaqa/c-board.cgi?cmd=ntr;tree=78;id=FAQ
'こちらを参考にしました
Dim cel As Range
Dim 関係 As String
関係 = ""
For Each cel In Range("G2:G11") ' ここに検索範囲をいれる
If StrComp(cel.Value, NameText) = 0 Then ' 名無しさん発見!!
関係 = "会社関係"
Exit For ' For文をでる
End If ' If 終わり
Next ' For 次の celへ
If Len(関係) = 0 Then ' 文字が入っていないので 次の範囲を検索
For Each cel In Range("H2:H11") ' ここに検索範囲をいれる
If StrComp(cel.Value, NameText) = 0 Then ' ななしさん発見!!
関係 = "一般"
Exit For ' For文をでる
End If ' If 終わり
Next ' For 次の celへ
End If
' If Len(関係) = 0 Then 関係 = "誰だ???" ' リストにない文字
Get関係 = 関係 ' 関数に値をいれて終了
End Function
Private Sub CommandButton1_Click()
Dim ARow, ACol As Long
Dim StartCell As String
Dim i, j As Long
' 下に検索
StartCell = "B4" ' 検索開始位置
ARow = Range(StartCell).Row ' B4の 行の数字を代入
ACol = Range(StartCell).Column ' B4の 列の数字を代入
For i = ARow To 65536 ' 行を操作
If IsEmpty(Cells(i, ACol)) And _
IsEmpty(Cells(i, ACol + 1)) And _
IsEmpty(Cells(i, ACol + 2)) Then
' もし空白なら
' ここに処理
' i 行目、ACol 列目
Cells(i, 2) = "名無しさん" ' Cells(i, ACol)
Cells(i, 3) = "受付時間" ' Cells(i, ACol + 1)
Cells(i, 4) = "受付番号" ' Cells(i, ACol + 2)
Cells(i, 1) = Get関係("名無しさん")
Exit For ' for文をでる
End If
Next
End Sub
|
|