엑셀 (24)
엑셀 - 두 가지 조건 만족하는 셀의 개수 계산
반응형

엑셀함수에서 두 가지 조건을 만족하는 셀의 개수를 계산할 때, Countif함수를 사용한다.

그런데 조건되는 특정열의 서식이 숫자와 텍스트가 혼용된 경우에는어떻게 할까 고민했다.

Countblank함수는 조건을 둘 수 없었다.

나의 주무기! 인터넷 검색!!!!!!!! 드디어 찾았다.

포인트는 "<>"&"" 이네!

 

출처 : https://kin.naver.com/qna/detail.naver?d1id=1&dirId=102020101&docId=438972818


VBA적용시 코드

 

 

Sub test()

Dim i As Integer

  For i = 1 To 5
      Range("G" & 1 + i) = WorksheetFunction.CountIfs([$A$2:$A$11], Range("E" & 1 + i), [$C$2:$C$11], "<>" & "")
 Next

End Sub

 

 

반응형

'엑셀로 풀어가는 세상' 카테고리의 다른 글

vba - intersect, event프로시져  (0) 2023.09.01
vba - resize2  (0) 2023.08.31
vba - resize1  (0) 2023.08.31
vba - Scripting.Dictionary  (0) 2023.08.30
vba - 고유목록 추출(New Collection,Add)  (0) 2023.08.22
vba - Array(배열)1  (0) 2023.08.22
VBA - 중복값 제거(New Collection)  (0) 2023.08.21
엑셀 - 시트이름을 셀에 불러오기  (0) 2022.09.21
  Comments,     Trackbacks
vba - 고유목록 추출(New Collection,Add)
반응형

고유목록 추출

A열의 목록에서 '고유목록'을 추출하여,
B열에 있는 값들 중 '고유목록'에 해당하는 값들의 합계를 구해서 넣는 것으로
SUMIF함수를 이용하여 값을 구할 수 있다.

고유목록은 New Collection객체를 이용하여 추출할 수 있어서 For Each ~ Next문으로 Add매서드를 이용하여 구할 수 있다.
(New Collection객체는 중복된 항목을 제거하고 고유의 항목만 가지게 하는 객체로서
고유한 목록을 추가해 주는 Add매서드를 반드시 이용하여 작업해야 함)

New Collection객체의 변수 sj에 Add매서드를 이용하여, 공백제거된 문자화된 고유의 목록만 저장
sj.Add Trim(r),CStr(Trim(r))

'-----코드 시작
Dim sj As New Collection
Dim r As Range
Dim k As Long

On Error Resume Next   '중복된 값이 있으면 에러를 발생시킴으로 에러가 나면 그냥 넘어가라
For Each r in Range("A2:A21")
sj.Add Trim(r),CStr(Trim(r))    '고유항목만 뽑아서 공백을 제거하고, 텍스트화
Next
On Error Goto
'-----코드 끝



sj에 저장된 고유의 목록을 k변수의 순서에 따라 For문에 넣어 반복하고, 목록과 값이 들어갈 셀에 넣어주면 됨
(합계를 구하는 함수는 sumif을 이용하여 구해서 넣어줌)


'----코드 시작
For k = 1 to sj.count
Cells(k+1,"d") = sj(k)
Cells(k+1,"e") = Application.Sumif(Range("A2:A21"),sj(k),Range("B2:B21")
Next
'-----코드 끝





Range("A2:A21")와 Range("B2:B21")을 변수처리하여 문장을 조금 더 간단하게 만들어 주어도 될 것 같네요

'----코드 시작-
Dim tk As Range, kr As Range
Set tk = Range("A2:A21")
Set kr = Range("B2:B21")

For k = 1 To sj.count
Cells(k+1,"d") = sj(k)
Cells(k+1,"e") = Applcation.Sumif(tk,sj(k),kr)
Next
'-----코드 끝



https://blog.naver.com/romyok12/222930690848



반응형
  Comments,     Trackbacks
VBA - 중복값 제거(New Collection)
반응형

Sub test()

 

Dim rngA As Range '전체 범위변수
Dim rngB As Range   'For Each를 위한 단일 셀 변수
Dim C As New Collection   '원하는 데이터를 담아줄 Collection선언

Set rngA = Range("C3", Cells(Rows.Count, "c").End(xlUp))
'ranA에는 C3부터 C열 마지막 행까지의 범위를 담아줘
'반복문을 통한 Collection에 값 담아주기

On Error Resume Next


For Each rngB In rngA
'rngA에서 하나의 셀씩 반복해줘
    If Len(rngB) Then  'rngB에 데이타가 있다면
                C.Add Trim(rngB), CStr(Trim(rngB))
               'C라는 Collection에 rngB의 앞뒤 공백을 제거하고 추가해주고,
                         'Key값으로는 CStr을 이용하여 앞뒤공백을 제거해준 rngB값으로 해줘
        End If
Next



Dim i As Long 'Collection을 반복문으로 값을 뿌려주기 위한 변수
     For i = 1 To C.Count ' Collecdtion C의 갯수만큼 반복해줘
     Cells(2 + i, "f") = C(i) '2+i행,f열에 C의 i번째 아이템을  넣어줘
Next

End Sub   '출처 :https://blog.naver.com/mrdjrblog/222456575897

 

[엑셀 VBA 매크로] - 47강 중복값제거 (removeduplicate,고급필터, collection) with 엑셀디자인

[중복값제거] 이번 47강의에서는 중복값을 제거하는 3가지 방법을 공부해보았는데요 3가지 모두 유용하더라...

blog.naver.com

 

 

반응형
  Comments,     Trackbacks
엑셀팁 - 다중조건에서 구간값 구하기
반응형

짧은 문구 속에 내가 목적한 내용을 온전히 표현하기 쉽지 않다.

 

그림1에서는 기준데이타가 A1:E26에 담겨져 있다.

이를 토대로해서 품목, 타입 및 주문수량을 감안하여 가격을 자동으로 산출한다.

산출수식은 그림1속에 표기해 둔다(네이버 지식IN에 내가 질문한 내용을 지식인이 알려준 내용임).

 

 

 

그림1

그림2는 기준데이타가 I5:Q10에 담겨져 있다.

포멧이 그림1과는 약간 다르기에 이 글에 담아 저장한다.

 

그림2

 

반응형
  Comments,     Trackbacks
엑셀팁 - 특정 셀의 값(숫자)에 따라 다른 셀의 색상 자동변동
반응형

아래 내용은 내가 네이버 지식IN에 질문을 올려 얻은 답이다.

조건부 서식 셀의 색상 변동

만약 품목A의 종류가 2개이면, 2개의 셀이 녹색으로 채워지고, 종류가 3개면 3개 셀이 녹색으로 채워지게 하는 것이다.

 

'B4:B13'블럭을 설정한 후 '조건부 서식'에서 아래와 같이 하면된다.

지식인 도움으로 해결은 했지만 왜 ROW(A1)을 사용하는지 모르겠다. 

반응형
  Comments,     Trackbacks
엑셀팁 - 특정 셀의 입력값에 따라 시트이름 자동 변환
반응형

앞선 글 "엑셀팁 - 특정 셀의 클릭시 새로운 시트 생성 & 이름 자동"과는

달리 이번 글은 이미 생성되어 있는 시트의 이름을 특정셀의 값으로 가져오는 것이다.

 

예를들면 홍길동의 자료가 담긴 시트가 있다면, A5셀에  '홍길동'입력하면 그 시트 이름이 '홍길동'으로 자동변환하게 된다.

엑셀에서 '홍길동' 시트 복사하면 시트 이름이 '홍길동 (2)'이 된다.

여기서 A5셀에 '이순신'을 입력하면 시트 이름이 '이순신'으로 자동변환된다.

 


Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
ActiveSheet.Name = ActiveSheet.Range("A5").Value
End Sub


특정 셀의 입력값에 따라 시트이름 자동변환.txt
0.00MB

반응형
  Comments,     Trackbacks
엑셀팁 - 특정 셀의 클릭시 새로운 시트 생성 & 이름 자동
반응형

본 글의 내용은 네이버 지식IN에 올려진 것을 그대로 옮겨왔다.

아래의 코드는 특정 셀에 입력된 내용을 '시트이름'으로 그대로 인용할 수 있는 코드다.

본 코드문에서의 특정 셀은 A2:A1100로 정하였으나 사용자의 의도에 따라 셀 범위를 변경가능하다.

 

주의할 점은 A2:A1100의 셀을 두번 클릭해야만 새로운 시트 생기면서 셀의 내용이 시트이름이 된다는 점이다.

 

 


Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    If Not Application.Intersect(Range("A2:A1100"), Target) Is Nothing Then
        On Error Resume Next
        Dim sh As Worksheet
        Dim shA As Worksheet
        If Target.Value = "" Then Exit Sub
        Set shA = ActiveSheet
        Set sh = Worksheets(CStr(Target.Value))
        If sh Is Nothing Then
            Set sh = Worksheets.Add(, Worksheets(Sheets.Count), 1)
            sh.Name = CStr(Target.Value)
        End If
        shA.Activate
        Cancel = True
    End If
End Sub


더블클릭시 시트생성 코드.txt
0.00MB

반응형
  Comments,     Trackbacks
중복데이터만 표시하기
반응형

엑셀 중복데이타(값)만 표시하기

한때는 식은 죽기로 사용했던 함수인데, 하도 엑셀을 사용한 오래되서 가물가물하다.

 

반응형
  Comments,     Trackbacks
최근 작성 글
최근 작성 댓글
최근 작성 트랙백
프로필
공지사항
글 보관함
캘린더
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
TODAY TOTAL