2017-02-06 7 views
1

同じ「件名ID」と列(値A)を持ち、件名IDによって常に同じ値を持つ複数行のExcelファイルがあります)。例:Excel:列データを別の列IDでフレシングするID

╔══════════════════════════╗ 
║ | subject id | value A | ║ 
╠══════════════════════════╣ 
║ |:----------:|---------| ║ 
║ |  1  | A | ║ 
║ |  1  | A | ║ 
║ |  1  |   | ║ 
║ |  1  |   | ║ 
║ |  2  |   | ║ 
║ |  2  |   | ║ 
║ |  2  | B | ║ 
╚══════════════════════════╝ 

どのように私はそれが同じサブジェクトIDと値Aに同じ値をすべての行を与えるような列の値を下にドラッグすることができます式を作成し、ExcelでIができますか?私のデータには、特定のサブジェクトIDの値A列に異なる値がある状況はありません。値があるかどうかです。

たとえば、IDが1のすべての被験者が値Aを取得し、被験者IDが2のすべてのレコードについて、受信するようにしたい「B」の値。例:

╔══════════════════════════╗ 
║ | subject id | value A | ║ 
╠══════════════════════════╣ 
║ |:----------:|---------| ║ 
║ |  1  | A | ║ 
║ |  1  | A | ║ 
║ |  1  | A | ║ 
║ |  1  | A | ║ 
║ |  2  | B | ║ 
║ |  2  | B | ║ 
║ |  2  | B | ║ 
╚══════════════════════════╝ 
+1

これらは実際の科目IDですか。私はこれがあなたのデータの簡素化だと思います。そうであれば、以下の答えが働きます。あなたが使用した答えによってチェックマークをクリックすることで、フィードバックを与え、そのうちの1つを正解にしてください。そうでなければ、式で正しいことをすることができず、 Value Aが置かれている第3の列、またはそれを実行するためのvba。 –

+0

値A列のIDと内容は単純化されています。IDと実際のデータセットの数値である他のフィールドの値との間には固有の関係はありません。私は混乱をお詫びしますが、存在しない固有の関係を前提としているので、これまでに提供されている回答のどれも実際に私の質問に答えません。 – Luke

+0

次に、vbaを使用して検索するか、数式を含む3番目の列を使用していますか? –

答えて

0

ASCIIコードを使用して数値をcharに変換するには、Charを使用します。

注、これが唯一のことは、あなたが手紙を使い果たすとダンのソリューションに拡張ブラケットおよびその他の文字

=CHAR(A2+64) 
+0

「値A」列には、ほとんどのものを含めることができます(データセット内の数字です)。そのIDとそのフィールドの値との間には本質的な関係はないので、数式はあまり役に立ちません – Luke

0

を取得を開始します後、このソリューションは、より多くの上で動作する必要があり、26の値まで動作します26種類の異なるIDより

=IF(A1>26,CHAR(QUOTIENT(A1-1,26)+64),"") & CHAR(1+MOD(A1-1,26)+64) 

ここでA1はIDを持ちます。この式は以下になります

1 A 
2 B 
. 
. 
. 
26 Z 
27 AA 
28 AB 
29 AC 
. 
. 
. 
44 AR 
45 AS 
. 
. 
. 
53 BA 
54 BB 
55 BC 
ここ
+0

「値A」列にはほとんどのものを含めることができます(データセット内の数値です)。 IDとそのフィールドの値との間には固有の関係はないため、数式はあまり役に立ちません。 – Luke

0

は私の結果である結果:

+------------+---------+----------------+ 
| subject id | value A | Formula result | 
+------------+---------+----------------+ 
|   1 |   | Hello   | 
|   1 |   | Hello   | 
|   1 | Hello | Hello   | 
|   1 |   | Hello   | 
|   1 |   | Hello   | 
|   1 |   | Hello   | 
|   2 |   | B    | 
|   2 | B  | B    | 
|   2 | B  | B    | 
|   2 |   | B    | 
|   2 |   | B    | 
|   2 | B  | B    | 
|   3 |   | World   | 
|   3 |   | World   | 
|   3 | World | World   | 
|   3 |   | World   | 
|   3 |   | World   | 
|   4 |   | D    | 
|   4 | D  | D    | 
|   4 |   | D    | 
|   4 |   | D    | 
+------------+---------+----------------+ 

私はC2にそれのための式をUDFを構築し、=コードの取得(A2です$ A $ 2:$ A $ 22と、 1)ここで、最初のパラメータは検索する値、2番目は検索する範囲、最後は結果を探すためにオフセットする列です。以下

コード:

Function GetCode(InputValue As String, SearchRange As Range, ColOffset As Long) 
Dim TempVal As String, FirstFoundRow As Long, LastFoundRow As Long, X As Long 
On Error Resume Next 'If not found the result will be null 
TempVal = Null 
If WorksheetFunction.CountIf(SearchRange, InputValue) > 0 Then 
    FirstFoundRow = SearchRange.Find(InputValue).Row 'Determine the rows to check 
    LastFoundRow = SearchRange.Find(InputValue, , , , , xlPrevious).Row 'Find the last row, no need to test after that 
    For X = FirstFoundRow To LastFoundRow 'Loop the checking rows 
     TempVal = SearchRange.Cells(X, ColOffset + 1).Text 'Assign the value of the offset column for the tested row 
     If TempVal <> "" Then Exit For 'Quit the loop if it has found the answer 
    Next 
End If 
GetCode = TempVal 
End Function 

仮定: サブジェクトIDがソートされます。そうでないと、結果が間違っていても、連続していないデータのインスタンスを検索するコードを変更するだけで十分です。

注:もう少しキー詳細にあなたの質問をフォーマットしてみてください、以前のすべての答えは私がやった同じ仮定(あなたは1を持って作られた - それは簡単なことだあなたのサンプルデータとしてB - A、2私の前提を参考にして、あなたが私たちに言わなかったようにソートされたデータの前提を作らなければなりませんでした。

コピーを取ってダブを削除し、ブランクを削除するためにcol Bをソートし、新しく作成されたマトリックスに対してVLOOKUPフォーミュラを使用してください。