[VBA] 셀값을 참조해서 범위 찾기

VBA
작성자
가람
작성일
2021-12-07 11:37
조회
2369
엑셀버전 : M365

운영체제 : 윈도우10

단어 관련 암기를 돕기위해서 사용하고 있던 코드인데요. 
이번에는 "전범위"시트의 "F1"값을 참고해서 "H:K"열에 있는 "F1"값의 옆에 있는 범위 ex) F1= 1-5 일때 범위 "1-150"을
참조해서 만드는 코드를 만들고 싶습니다. 그러면 F1값만 변경해주고 버튼을 누르면 자동으로 내용이 단어 내용이 변경될 수 있게요!
솔직히 혼자 해보려고 했는데, 계속 안되서 도움 요청합니다.
보라색 부분을 변경하면 될것 같았는데 아닌가요? ㅠㅠ
---------------------------------------------------------------------------------------------------------
Option Explicit
 
Dim 자료 As Range
 
Sub 버튼_문제출제_클릭()
    Dim 번호     As Range
    Dim strSec   As String
    Dim fNum     As Long
    Dim arrSec   As Variant
    Dim myNum    As Variant
    Dim cnt      As Long
    Dim n        As Long
    Dim rndNum() As Variant
    Dim myData() As Variant
 
    Set 자료 = Sheets("DATA").[A1].CurrentRegion
    Set 번호 = Sheets("TEST").[A1].CurrentRegion
    Set 번호 = 번호.Offset(2, 1).Resize(번호.Rows.Count - 2, 1)
 
 
    '----------------------------------
    ' 초기화 - 랜덤, 기존자료, 머릿글
    '----------------------------------
    번호.Resize(, 2) = Empty ' 기존자료 삭제
    With Range("b2")
        ' 머릿글 설정
        If n = 1 Then
            .Resize(, 2) = Array("해석", "원문")
        Else
            .Resize(, 2) = Array("원문", "해석")
        End If
    End With
 
    '----------------------------------
    ' 랜덤 번호 가져오기
    '----------------------------------
    cnt = 번호.Rows.Count
    ReDim rndNum(1 To cnt)
    ReDim myData(1 To cnt, 1 To 2)
<span style="color: #800080;">    On Error GoTo Error_Handler
    strSec = InputBox("시작번호와 종료번호를 입력" & vbCr & vbCr & _
                        "ex) 12-" & 12 + cnt - 1, "시작 번호")
    If strSec = "" Then Exit Sub
    arrSec = Split(strSec, "-")
    If UBound(arrSec) <> 1 Then GoTo Error_Handler
    arrSec(0) = Val(Trim(arrSec(0)))
    arrSec(1) = Val(Trim(arrSec(1)))
    If arrSec(1) - arrSec(0) + 1 < cnt Or arrSec(1) > 자료.Rows.Count Then
        MsgBox "구간 입력이 잘못되었습니다.", 64, "입력 오류"
        Exit Sub</span>
    End If
    Call mkRandom(cnt, arrSec, rndNum)
    If Sheets("TEST").Shapes("옵션_해석").ControlFormat.Value = 1 Then
        For n = 1 To cnt
            myData(n, 1) = 자료(rndNum(n), 2).Value
        Next n
        번호.Value = myData
    Else
        For n = 1 To cnt
            myData(n, 1) = 자료(rndNum(n), 2).Value
            myData(n, 2) = 자료(rndNum(n), 3).Value
        Next n
        번호.Resize(, 2).Value = myData
    End If
 
    '----------------------------------
    ' 변수 메모리 초기화
    '----------------------------------
    Set 자료 = Nothing
    Exit Sub
Error_Handler:
    MsgBox Err.Description
End Sub
 
Sub mkRandom(ByVal Cont As Long, ByVal mySec As Variant, ByRef rndNum As Variant)
    Dim n   As Long
    Dim dpl As Boolean
    Dim ni  As Long
    Randomize
    For ni = 1 To Cont
        dpl = False
        Do Until dpl = True
            rndNum(ni) = Int(Rnd() * (mySec(1) - mySec(0) + 1) + mySec(0))
            dpl = True
            For n = 1 To ni - 1
                If rndNum(n) = rndNum(ni) Then dpl = False
            Next
        Loop
    Next
End Sub

------------------------------------------------------------------------------------------------------------------

신고
스크랩
공유
회원등급 : 9레벨
포인트 : 669 EP
총질문 : 16 개 (마감율 : 75%)
채택답변 : 0 개
전체 2

  • 2021-12-09 00:28

    @가람 님 구현하고 싶은 것이
    문제번호를 입력하는 방식에서
    구간으로 입력하기를 원하는 건가요?
    현재 I, K 컬럼의 값을 입력하는 것을
    이에 대응하는 H,J 컬럼 값으로 입력하기를 원하는 것인가요?

    - 입력받은 번호 범위를 DATA 시트의 A컬럼으로 가져오는
    로직인듯 한데,

    - 위와 같이 하려면
    arrSec(0) = Val(Trim(arrSec(0)))
    arrSec(1) = Val(Trim(arrSec(1)))

    각 번호는 30개로 대응되므로
    위 구문 아래에 아래 코드를 삽입하면 될 듯 싶습니다.

    arrSec(0) = (arrSec(0)-1)*30 +1
    arrSec(1) = (arrSec(1)-0)*30 + 0 '// 리듬 감을 주기 위해, -0, +0 사용


    • 2021-12-09 12:25

      @야휘 님 답변 감사합니다.
      제가 올려드린 코드를 구동하면 범위를 입력하는 메세지박스가 뜨는데, 그부분을 자동으로 할수있게 줄이고 싶었던 거라서요.

      지금은 단어를

      "F1"값에 진도를 복사해 넣고, "H:K"열에 있는 "F1"값의 옆에 있는 범위 ex) F1= 1-5 일때 범위 "1-150"를 복사해서 메세지 박스에 붙여넣어서
      단어가 랜덤으로 변경되는 방식인데 복사해서 붙여넣는 이 과정을 줄이고 싶어서요.

전체 18,532
번호 카테고리 제목 작성자 작성일 추천 조회
알림
[📚진짜쓰는 실무엑셀] IT/오피스 '1위' 베스트셀러! 엑셀 공부, 이 교재로 마스터하세요! (315)
오빠두엑셀 | 2022.02.03 | 추천 575 | 조회 609825
오빠두엑셀 2022.02.03 575 609825
공지사항 문서서식
⭐ [더 나은 커뮤니티 문화를 위한 Q&A 글 작성 규칙] ⭐ (197)
오빠두엑셀 | 2021.10.28 | 추천 310 | 조회 35557
오빠두엑셀 2021.10.28 310 35557
78582 함수/공식
New 조건 함수 의 관한 문의 엑셀파일첨부파일 (4) 답변완료
예쁜나야 | 2025.05.13 | 추천 0 | 조회 56
예쁜나야 2025.05.13 - 56
78580
New 날짜와 시간 분할 방법 알려 주세요 엑셀파일첨부파일 (2) 답변완료
계양산 지기 | 2025.05.13 | 추천 0 | 조회 45
계양산 지기 2025.05.13 - 45
78575 VBA
New 엑셀 재고관리 프로그램 문의드립니다.. 첨부파일 (2)
SJ | 2025.05.13 | 추천 0 | 조회 80
SJ 2025.05.13 - 80
78570 대시보드
New 대시보드에 표 형식으로 표현도 가능한가요? 첨부파일 (2)
룰루랄라 | 2025.05.12 | 추천 0 | 조회 83
룰루랄라 2025.05.12 - 83
78569 함수/공식
New 서로 다른 양식의 견적서 엑셀 파일 한곳에 정리 하기 (5)
gh**** | 2025.05.12 | 추천 0 | 조회 107
gh**** 2025.05.12 - 107
78565 함수/공식
New 검색보고서 만들기 질문드립니다. 엑셀파일 (9) 답변완료
만식이햄 | 2025.05.12 | 추천 0 | 조회 92
만식이햄 2025.05.12 - 92
78563 VBA
New VBA 수정 부탁드립니다. ㅠ (3)
서비 | 2025.05.12 | 추천 0 | 조회 82
서비 2025.05.12 - 82
78560 함수/공식
New 어떻게 내용을 가져올수 있을지 고수님들의 해결방법들을 공유 받고 싶습니다!!.... 엑셀파일첨부파일 (2)
꾸르형 | 2025.05.12 | 추천 0 | 조회 49
꾸르형 2025.05.12 - 49
78559 파워쿼리/피벗
New 엑셀 자동화 질문 입니다... 엑셀파일 (2) 답변완료
안녕하세여11 | 2025.05.12 | 추천 0 | 조회 69
안녕하세여11 2025.05.12 - 69
78555 함수/공식
New 시트에서 원하는 열의 자료만 가져오고싶은데 아무리 해도 수식오류가 나서 도움을 구하고자 합니다 엑셀파일 (4) 답변완료
khs**** | 2025.05.12 | 추천 0 | 조회 46
khs**** 2025.05.12 - 46
78554 함수/공식
New 변동하는 절대참조값 적용 (6) 답변완료
화이또! | 2025.05.12 | 추천 0 | 조회 70
화이또! 2025.05.12 - 70
78553 대시보드
New 대시보드_슬라이서 자동으로 눌러지게 하는방법 첨부파일 (1)
검도림 | 2025.05.12 | 추천 0 | 조회 52
검도림 2025.05.12 - 52
78548 대시보드
New 어떤 엑셀을 적용해야하는 지 문의드립니다! (1)
룰루랄라 | 2025.05.11 | 추천 0 | 조회 70
룰루랄라 2025.05.11 - 70
78546 함수/공식
New 월별 매출액 자동입력할 수 있는 방법 또는 함수 궁금합니다! 엑셀파일 (2)
mmm1010 | 2025.05.11 | 추천 0 | 조회 89
mmm1010 2025.05.11 - 89
78544 함수/공식
New 중복값 제거 함수에 관하여 엑셀파일첨부파일 (1) 답변완료
김지훈(Derek) | 2025.05.11 | 추천 0 | 조회 79
김지훈(Derek) 2025.05.11 - 79
78543 함수/공식
New 데이터 추출 및 정렬관련 초보질문 엑셀파일첨부파일 (5) 답변완료
김지훈(Derek) | 2025.05.11 | 추천 0 | 조회 76
김지훈(Derek) 2025.05.11 - 76
78540 함수/공식
New 오빠두LIVE 219회 - 엑셀 '셀 병합' 자동화 보고서 만들기 오빠두엑셀님의 방법이 궁금합니다. 첨부파일
AURIC | 2025.05.10 | 추천 0 | 조회 64
AURIC 2025.05.10 - 64
78536 함수/공식
New 월별로 금액적용후 최종월에 차액을 가감 함수가 필요해요 엑셀파일 (1) 답변완료
낮은자 | 2025.05.10 | 추천 0 | 조회 67
낮은자 2025.05.10 - 67
78535 기능/도구
New 엑셀로 25x25 인쇄가 가능한가요? (1)
망나 | 2025.05.10 | 추천 0 | 조회 52
망나 2025.05.10 - 52
78534 파워쿼리/피벗
New 쿼리에 함수 적용한 열 추가 시 24:00:00 활용한 계산 함수 필요할 때. 첨부파일 (2) 답변완료
신노스케 | 2025.05.10 | 추천 0 | 조회 67
신노스케 2025.05.10 - 67
78531 차트/그래프
New 엑셀 차트 데이터테이블 엑셀파일첨부파일 (1)
| 2025.05.09 | 추천 0 | 조회 76
2025.05.09 - 76
78530 구글시트
New 구글 스프레드시트 함수 관련 질문입니다. 엑셀파일첨부파일 (2)
동그이 | 2025.05.09 | 추천 0 | 조회 68
동그이 2025.05.09 - 68
78528 구글시트
New 구글 스프레드시트를 외부 엑셀 파일과 연동하는 방법이 궁금합니다. (3)
머우터덩 | 2025.05.09 | 추천 0 | 조회 72
머우터덩 2025.05.09 - 72
78525 문서서식
New 업무가 진행이 안 될 정도로, 해당 파일이 느립니다! 엑셀파일 (2)
빌스택스 | 2025.05.09 | 추천 0 | 조회 96
빌스택스 2025.05.09 - 96
78520 기능/도구
New 하이퍼링크 명칭 해제 (1)
min | 2025.05.09 | 추천 0 | 조회 54
min 2025.05.09 - 54
78518 피벗테이블
New 피벗테이블 관련 화살표 질문 첨부파일
이모비니 | 2025.05.09 | 추천 0 | 조회 50
이모비니 2025.05.09 - 50
78516 함수/공식
New 호봉산정 엑셀 문의드립니다. 엑셀파일첨부파일 (2) 답변완료
아르카디안 | 2025.05.08 | 추천 0 | 조회 61
아르카디안 2025.05.08 - 61
78515 함수/공식
New 엑셀 질문 드립니다.ㅠ.ㅠ 첨부파일 (1)
숲의사제 | 2025.05.08 | 추천 0 | 조회 57
숲의사제 2025.05.08 - 57
78511 함수/공식
New 입사일자로 부터 매년 알림 (2)
국빱 | 2025.05.08 | 추천 0 | 조회 72
국빱 2025.05.08 - 72
78510 문서서식
New 조건부 서식 적용 문의 엑셀파일첨부파일 (2) 답변완료
장수벌레 | 2025.05.08 | 추천 0 | 조회 102
장수벌레 2025.05.08 - 102