[[20080516101845]] 『CEの頭文字』(CE) ページの最後に飛ぶ

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

 

『CEの頭文字』(CE)
 お世話になります。
 C列E列の頭文字(数字アルファベット等)の相違を検索したいのですが
 条件・頭文字5文字以内が同じならG列に1を立てる

 例)
 C1・・・AB12-CD3400←頭はA〜始まり5文字目は-
 D1・・・AB12-CD34000←頭はA〜始まり5文字目は-
 G1・・・1←(重複と言う意味)
 6文字目からはバラバラでもOKなので・・・・
 データは数万とあります。
 よろしくお願いいたします。(CE)


 left関数で

 ?どう言うことでしょうか?初心者な者で(CE)

 もしかしたら勘違いかもしれません。
 5文字目までが完全に一致したものだけをGに1をたてたいのですが??
 マクロは無理でしょうか??(CE)

 > C列E列の頭文字(数字アルファベット等)の相違を検索したいのですが
 > 条件・頭文字5文字以内が同じならG列に1を立てる

 数式なら [G1]に
    =IF(LEFT(C1,5)=LEFT(E1,5),1,"")
 必要な行までコピー

 ということだと思うので、

 > マクロは無理でしょうか??(CE)
 なら、とりあえず、この操作をマクロ記録してみれば、と思います.

  (kanabun)

 ありがとうございます。
 初めて行ったのですが下記のようになってダメでした・・

 Sub Macro1()
 '
 ' Macro1 Macro
 '

 '
    Range("G1").Select
    ActiveCell.FormulaR1C1 = "=IF(LEFT(RC[-4],5)=LEFT(RC[-2],5),1,"""")"
    Range("G2").Select
 End Sub
 難しすぎて・・(CE)

 こちらで記録したマクロは↓でした。

 Sub Macro1()
 ' Macro1 Macro
 '
    Range("G1:G40").Select
    Selection.FormulaR1C1 = "=IF(LEFT(RC[-4],5)=LEFT(RC[-2],5),1,"""")"
 End Sub

 つまり CEさんのと違うのは
 最初に数式を書き込む範囲を [G1:G40]のデータがある行全部を
 指定している点です。
  G1からG列の何行目まで数式を書き込むかを C列か E列で最終行番号
 を求めておいて、数式をセットする範囲のマクロ記録
'   Range("G1:G40") の代わりに
  Range("G1:G" & データ最終行) とすればいいです。

 数式は R1C1形式で記録されるから、どの行もこのままでいいですよね。

 Sub CE同じなら_G列に1を()
    Dim LastRow As Long   '↓ E列で データ最終行を求めています
    LastRow = Range("E65536").End(xlUp).Row 
    Range("G1:G" & LastRow).FormulaR1C1 = "=IF(LEFT(RC[-4],5)=LEFT(RC[-2],5),1,"""")"
 End Sub


  補足
  マクロ記録は R1C1 形式で数式記録されますが、
  手作業で打ち込んだときのような A1形式でも同じです。

   Range("G1:G" & LastRow).Formula = "IF(LEFT(C1,5)=LEFT(E1,5),1,"""")"

    (kanabun)


 kanabunさん大変!!
 式の最初の「=」が抜けてますよ。
(まぁ、気付いて修正出来る範囲内かとは思いますが・・・。)

 (HANA)

 > kanabunさん大変!!
 > 式の最初の「=」が抜けてますよ。
 >(まぁ、気付いて修正出来る範囲内かとは思いますが・・・。)

 おぉ、抜けてました。ごめんなさい。
 HANA さん、フォローありがとうございます。
 数式の お尻の   """")"  の数ばかり数えてました 
  (kanabun) m(__)m

 ありがとうございます。
 一つぬけていました。
 CEが入力されない場合も1が・・・
 入力があり 5文字目までが完全に一致したものだけをGに1をたてたいのですが・
  Sub Macro1()
 ' Macro1 Macro
 '
    Range("G1:G20000").Select
    Selection.FormulaR1C1 = "=IF(LEFT(RC[-4],5)=LEFT(RC[-2],5),1,"""")"
 End Sub

 範囲は変更しました。(CE)

 空白"","",を何処かにいれれば・・・

 数式はこんな感じ?
 "=IF(and(counta(c1,e1)=2,LEFT(C1,5)=LEFT(E1,5)),1,"""")"
 (seiya)

 マクロの数式?を変更したら#NAMEがでてしまいました。
  Sub Macro1()
 ' Macro1 Macro
 '
    Range("G1:G20000").Select
    Selection.FormulaR1C1 = "=IF(and(counta(c1,e1)=2,LEFT(C1,5)=LEFT 
 (E1,5)),1,"""")"

 End Sub
 と入れてみたのですが?(CE)


 A1形式の数式なのでFormulaR1C1 にするとそうなるでしょうね...

 Selection.Formula = "=IF(and(counta(c1,e1)=2,exact(LEFT(C1,5)=LEFT(E1,5))),1,"""")"
                                             (完全一致)
 (seiya)

 ありがとうございます。
 しかし実行エラー1004が
  Sub Macro1()
 ' Macro1 Macro
 '
    Range("G1:G20000").Select
    Selection.Formula = "=IF(and(counta(c1,e1)=2,exact(LEFT(C1,5)=LEFT  
 (E1,5))),1,"""")"

 End Sub
 に変更したのですが?(CD)


 あらら = を , に変えてください。
 "=IF(and(counta(c1,e1)=2,exact(LEFT(C1,5),LEFT(E1,5))),1,"""")"
                                         ^^^
 (seiya)

 何度も申し訳ございません。
 Sub Macro1()
 ' Macro1 Macro
 '
    Range("G1:G20000").Select
    Selection.FormulaR1C1 = "=IF(and(counta(c1,e1)=2,exact(LEFT(C1,5),LEFT 
 (E1,5))),1,"""")"

 End Sub

 上記のように標準モジュールにいれて実行すると#NAME?とでてしまい?
 #NAME?のところをクリックして式をみると
 =IF(AND(COUNTA($A:$A,'e1')=2,EXACT(LEFT($A:$A,5),LEFT('e1',5))),1,"")
 になってしまいA列を指して??(CD)


 FormulaR1C1 プロパティはxlA1形式の数式は受け付けません。
 Formula です。

 Range("G1:G20000").Formula = "=IF(and(counta(c1,e1)=2,exact(LEFT(C1,5),LEFT(E1,5))),1,"""")"
                   ^^^^^^^^
 です。
 (seiya)

 Sub Macro1()
 ' Macro1 Macro
 '
     Range("G1:G20000").Formula = "=IF(and(counta(c1,e1)=2,exact(LEFT(C1,5),LEFT(E1,5))),1,"""")"

 End Sub
で出来ました。。ありがとうございました。(CE)

 今後も色々なデーターに対応出来ればいいな〜と思い駄目もとで質問させて
 いただきます。
 たとえば、マクロを実行すると
 メッセージボックスが出てきて・複数の検索可能
 1:何処の列を検索しますか?
 2:何文字目(数字、英字、その他も含む)までの文字の重複を検索?
 3:その答えを(今回は行が多いい事を想定して)Z列に
 上記2番目の指定文字数が重複していれば”重複”
 していなければ"相違"と言う文字を・・・
 なんて事は夢?夢?でしょうか?(CE)

 夢マクロはどっちでっしゃろ?
     (弥太郎)
 '------------------------
 Sub 夢マクロ()
    Dim mxrow As Long, rng As String, idx As Integer, adrs1 As String, adrs2 As String, x
    rng = InputBox("範囲は何処と何処でっか? A=B,E=F,H=I といった塩梅に書き込んでくらはい。")
    If rng = "" Then Exit Sub
    idx = StrConv(InputBox("何文字目(数字、英字、その他も含む)まで文字の重複検索?"), vbNarrow)
    If idx = 0 Then MsgBox "キチンと入力してくらはい": Exit Sub
    If Not rng Like "*,*" Then
        Range("z1").Resize(Range(Split(rng, "=")(0) & Rows.Count).End(xlUp).Row). _
            Formula = "=if(and(counta(" & Split(rng, "=")(0) & 1 & "," _
                & Split(rng, "=")(1) & 1 & "),exact(left(" & Split(rng, "=")(0) _
                    & 1 & "," & idx & "),left(" & Split(rng, "=")(1) & 1 & "," _
                        & idx & "))),""重複"",""相違"")"
        Exit Sub
    Else
        data = Split(rng, ",", -1)
        For u = LBound(data) To UBound(data)
            mxrow = Range(Split(data(u), "=")(0) & Rows.Count).End(xlUp).Row
            adrs1 = Range(Split(data(u), "=")(0) & 1).Address(0, 0)
            adrs2 = Range(Split(data(u), "=")(1) & 1).Address(0, 0)
            Range("z1").Offset(, u).Resize(mxrow).Formula = "=if(and(counta(" & adrs1 & "," _
                    & adrs2 & "),exact(left(" & adrs1 & "," & idx & "),left(" & adrs2 & "," _
                                & idx & "))),""重複"",""相違"")"
        Next u
    End If
 End Sub

 '--------------------------------
 Sub スーパー夢マクロ()
    Dim dic As Object, i As Long, n As Integer, idx As Integer, tbl, rng As String, x, data
    Set dic = CreateObject("scripting.dictionary")
    rng = StrConv(InputBox("範囲は何処と何処でっか? A〜D といった塩梅に書き込んでくらはい。"), vbNarrow)
    If rng = "" Then MsgBox " 入力されとりまへん": Exit Sub
    idx = StrConv(InputBox("何文字目(数字、英字、その他も含む)まで文字の重複検索?"), vbNarrow)
    If idx = 0 Then MsgBox "キチンと入力してくらはい": Exit Sub
    data = Split(rng, "~")
    tbl = Range(data(0) & 1).Resize(Range(data(0) & Rows.Count).End(xlUp).Row, _
                    Range(data(1) & 1).Column - Range(data(0) & 1).Column + 1)
    ReDim x(1 To UBound(tbl, 1), 1 To 1)
    For i = 1 To UBound(tbl, 1)
        For n = 1 To UBound(tbl, 2)
            If dic.exists(Left(tbl(i, n), idx)) Then
                x(i, 1) = "重複"
                Exit For
            Else
                dic(Left(tbl(i, n), idx)) = Empty
            End If
            If n = UBound(tbl, 2) Then x(i, 1) = "相違"
        Next n
        dic.Removeall
    Next i
    Range("z1").Resize(UBound(tbl, 1)) = x
 End Sub

 不要行削除〜(汗
      (弥太郎) 12:11

 うぁ〜すばらしいの一言で感動で何て言ったらいいか・・・
 (弥太郎)さん本当にありがとうございます。。
  Sub 夢マクロ()の方を使用してます。
 一つ気になって・・・両方が”空白”の場合は”相違”となってしまうのですね。。
 空白にする事って・・・何て欲張りですよね。
 もしも修正していただけるなら、上記のマクロは消さずに下記へお願い出来ないでしょうか?(CE)

 この関数の意味はおわかりでっか?
 =IF(AND(COUNTA(A1,B1),LEFT(A1,4)=LEFT(B1,4)),"重複","相違")
 A1若しくはB1 或いはその両方にデータがあって、且つA1の左4文字とB1の左4文字が
 一致していれば「重複」、一致していなければ「相違」と表示するっちゅう意味ですわ
 なぁ。
 それに もしA1及びB1にデータがなければ「""」と表示しなさいと付け加えたらええだ
 けですから簡単にお分かりかと存じます。
 頭捻って考えまひょぅ。でないと、はよ老けまっせ。^^
         (弥太郎)

 相違の部分を消すと言うことでしょうか?
 =IF(AND(COUNTA(A1,B1),LEFT(A1,4)=LEFT(B1,4)),"重複","")
 マクロの部分も消去?で違った場合は相違は表示しないで
 空白と同類になってしまう?ってことですよね??(CE)

 それやったら相違が表示されまへんでせぅ?
 A列とB列になんぼかデータを入れ、C列に式を書き込んで試してみたらどないでっっか?

 先ほども申し上げたように
 >もしA1及びB1にデータがなければ「""」と表示しなさいと付け加えたらええだ
 けですから簡単にお分かりかと存じます。
 ですワ。

 ここまできたらそう簡単にギブアップでけまへん?やろ?^^
 もちょっと頑張ってみてくらはい。
         (弥太郎)

 ギブアップ・・いろんな場所にいれましたがエラーが(CE)

 ギブアップでっかぁ・・・(ふか〜い溜め息^^)
 '-------------------
 Sub 夢マクロ()
    Dim mxrow As Long, rng As String, idx As Integer, adrs1 As String, adrs2 As String, x
    rng = InputBox("範囲は何処と何処でっか? A=B,E=F,H=I といった塩梅に書き込んでくらはい。")
    If rng = "" Then Exit Sub
    idx = StrConv(InputBox("何文字目(数字、英字、その他も含む)まで文字の重複検索?"), vbNarrow)
    If idx = 0 Then MsgBox "キチンと入力してくらはい": Exit Sub
    If Not rng Like "*,*" Then
        Range("z1").Resize(Range(Split(rng, "=")(0) & Rows.Count).End(xlUp).Row). _
            Formula = "=if(counta(" & Split(rng, "=")(0) & 1 & "," & Split(rng, "=")(1) _
                & 1 & ")=0,"""",if(and(counta(" & Split(rng, "=")(0) & 1 & "," _
                    & Split(rng, "=")(1) & 1 & "),left(" & Split(rng, "=")(0) _
                        & 1 & "," & idx & ")=left(" & Split(rng, "=")(1) & 1 & "," _
                            & idx & ")),""重複"",""相違""))"
        Exit Sub
    Else
        data = Split(rng, ",", -1)
        For u = LBound(data) To UBound(data)
            mxrow = Range(Split(data(u), "=")(0) & Rows.Count).End(xlUp).Row
            adrs1 = Range(Split(data(u), "=")(0) & 1).Address(0, 0)
            adrs2 = Range(Split(data(u), "=")(1) & 1).Address(0, 0)
            Range("z1").Offset(, u).Resize(mxrow).Formula = "=if(counta(" & adrs1 & "," _
                        & adrs2 & ")=0,"""",if(and(counta(" & adrs1 & "," _
                            & adrs2 & "),left(" & adrs1 & "," & idx & ")=left(" & adrs2 & "," _
                                & idx & ")),""重複"",""相違""))"
        Next u
    End If
 End Sub

 (弥太郎)さん本当にありがとうございました。
 感謝しています。今後もよろしくお願いいたします。(CE)


コメント返信:

[ 一覧(最新更新順) ]


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