2012-05-23 5 views
2

2 차원 배열에 데이터가 포함 된 Excel 파일이 있습니다. 내가 원하는 무엇매크로를 사용하여 Excel 파일의 데이터 바꾸기

Excel document

테이블 (토토, 또는 타타, 또는 티티)의 컬럼의 헤더 별표를 '*'대체 할 수있는 매크로를 만드는 것입니다.

+0

가 정확히 무엇에 별표 (*)를 교체 공식? 나는 네가 원하는 것을 불분명하다. 모든 별표를 해당 열의 머리글 이름으로 바꾸기 만합니까? – Bryan

+0

정확히 선생님, 1 호선 ('tata'), 2 호선 ('toto') 등등이 될 것입니다. –

+0

그래서 명확성을 위해 매크로 다음의 데이터가 다음과 같이 나타나길 원합니다. 첫 번째 데이터 행 (1 38 345 타타) 두 번째 라인 (2 toto 367 345) 등? – Bryan

답변

3

사용하여 바로 워크 시트 도구 (NO VBA) :

  • Ctrl-F
  • 찾기 = ~ *
  • Find All
  • Ctrl-A 모든 검색 결과
  • Close을 선택하는 어떤 대화 찾기
  • 두 번째 행에 머리글이 있다고 가정하고 커서가 있다고 가정합니다. 또는 열 C의 어딘가에서 땅 (광산, 두 번 YMMV했다), 유형 =C$2
  • 을 눌러 Ctrl-Enter
+1

+1 비 VBA 솔루션의 경우 :) –

+0

@SiddharthRout Thanks (^ : –

5

좋아요?

Option Explicit 

Sub Sample() 
    Dim oRange As Range, aCell As Range, bCell As Range 
    Dim ws As Worksheet 
    Dim ExitLoop As Boolean 

    On Error GoTo Whoa 

    '~~> Change this to the relevant sheet name 
    Set ws = Worksheets("Sheet1") 

    Set oRange = ws.Cells 

    Set aCell = oRange.Find(What:="~*", LookIn:=xlValues, _ 
       LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _ 
       MatchCase:=False, SearchFormat:=False) 

    If Not aCell Is Nothing Then 
     Set bCell = aCell 
     '~~> Assuming that the headers are in row 2 
     aCell.Value = Cells(2, aCell.Column) 
     Do While ExitLoop = False 
      Set aCell = oRange.FindNext(After:=aCell) 

      If Not aCell Is Nothing Then 
       If aCell.Address = bCell.Address Then Exit Do 
       '~~> Assuming that the headers are in row 2 
       aCell.Value = Cells(2, aCell.Column) 
      Else 
       ExitLoop = True 
      End If 
     Loop 
    End If 
    Exit Sub 
Whoa: 
    MsgBox Err.Description 
End Sub 
+0

그리고 이전에 Excel을 사용해 본 적이 없으므로 어떻게 구현할 수 있습니까? –

+0

이 코드를 모듈에 붙여 넣습니다. 위의 코드에서 "Sheet1"을 데이터가있는 관련 시트 이름으로 대체하십시오. 또한'aCell.Value = Cells (2, aCell.Column)'의'2'를 헤더가있는 행으로 변경하고 매크로를 실행하십시오. –

+0

또한 완료를 위해'Set oRange = ws.Cells'를 사용하고 있습니다 시트. 원하는 경우 관련 테이블 범위로 변경할 수 있습니다. 예를 들어,'Set oRange = ws.Range ("B2 : E6")' –

0

여기에 나와있는 간단한 방법이 있습니다.

i = 3 
While Cells(2, i).Value <> "" 
    Range(Cells(3, i), Cells(6, i)).Select 

    Selection.Replace What:="~*", Replacement:=Cells(2, i).Value, LookAt:=xlPart, _ 
    SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _ 
    ReplaceFormat:=False 
    i = i + 1 
Wend 

셀 (x, y) : x는 행을 참조하고, y는 열을 참조합니다.

코드가 적절한 범위를 선택하게하려면이 기본 기본 대신에보다 정교한 범위 선택을 사용할 수 있습니다.

Excel에서 구현하려면 코드 창을 열고 원하는 매크로/서브 루틴에이 코드를 붙여 넣기 만하면됩니다.

+1

셀을 통한 Bryan Looping은 내장 된'.Find'와'.FindNext'를 사용하는 것보다 느립니다. :) 아마도 이것을보고 싶습니까? http://siddharthrout.wordpress.com/2011/07/14/find-and-findnext-in-excel-vba/ 코스가 아주 적은 셀이라면 속도는 중요하지 않습니다. –

+0

이걸 보니? http://stackoverflow.com/questions/10714251/excel-macro-not-using-select –

+0

속도는이 경우 컬럼 수에 따라 결정됩니다. 실행 시간은 무시할 수있을 것입니다. 그리고 확신합니다.Find는 여러면에서 저의 단순한 제안보다 뛰어납니다. 쉽게 읽을 수 있고 이해할 수있는 것을 게시하는 것을 선호합니다. 내 대답은 단순히 Excel에서 "찾기 및 바꾸기"기능을 수행하고 각 열에 루프를 추가하는 것입니다. 다시 내 대답의 의도는 간단하고 기본적인 것이었다. – Bryan

관련 문제